इंटेलिजे आईडीईए 14.0.2 में एकाधिक धागे और ब्रेकपॉइंट्स के साथ मुझे एक अजीब समस्या है। ब्रेकपॉइंट के बाद कोड इसे बंद होने से पहले निष्पादित किया जाता है।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");
}
}
}
जब मैं लाइन 12, synchronized (this.lock)
पर एक ब्रेकपाइंट (को निलंबित सभी) रखा, System.out.println
अभी भी (कभी कभी कई बार) निष्पादित करता है।
जहाँ तक मुझे पता है, सभी धागे ब्रेकप्वाइंट पर बंद कर देना चाहिए: यहाँ एक स्क्रीनशॉट है।
जो लाइन 12 है? –
क्या होगा यदि आप लाइन 14 पर ब्रेकपॉइंट डालते हैं? (println) – Raffaele
मैं आपको आश्वस्त कर सकता हूं कि * धागे का एक * बंद हो गया है ... कौन सा अनिश्चित है। – Makoto