Tôi gặp sự cố lạ với nhiều chuỗi và điểm ngắt trong IntelliJ IDEA 14.0.2. Mã sau khi breakpoint được thực hiện trước khi nó dừng lại trên nó.Làm thế nào để gỡ lỗi một ứng dụng đa luồng trong IntelliJ?
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
private static final int NUM_CLIENTS = 1000;
static class TestRunnable implements Runnable {
AtomicInteger lock;
@Override
public void run() {
synchronized (this.lock) {
int curCounter = this.lock.addAndGet(1);
System.out.println("Thread: " + Thread.currentThread().getName() + "; Count: " + curCounter);
if (curCounter >= NUM_CLIENTS) {
lock.notifyAll();
}
}
}
}
public static void main(final String args[]) {
final AtomicInteger lock = new AtomicInteger(0);
for (int i = 0; i < NUM_CLIENTS; i++) {
TestRunnable tr1 = new TestRunnable();
tr1.lock = lock;
new Thread(tr1).start();
}
synchronized (lock) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Main woken up");
}
}
}
Khi tôi đặt một breakpoint (Suspend Tất cả) tại dòng 12, synchronized (this.lock)
, System.out.println
vẫn thực thi (đôi khi nhiều lần). Dưới đây là một ảnh chụp màn hình:
Theo như tôi biết, tất cả các chủ đề nên dừng lại ở breakpoint.
là dòng 12? –
Nếu bạn đặt điểm ngắt tại dòng 14 thì sao? (println) – Raffaele
Tôi có thể đảm bảo với bạn rằng * một * trong số các chủ đề đã dừng ... mà một trong những chưa được xác định. – Makoto