Как отладить многопоточное приложение в IntelliJ?
У меня странная проблема с несколькими потоками и точками останова в IntelliJ IDEA 14.0.2. Код после точки останова выполняется до того, как он остановится на нем.
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");
}
}
}
Когда я помещаю точку останова (Suspend All) в строке 12, synchronized (this.lock)
, System.out.println
все еще выполняется (иногда несколько раз). Вот скриншот:
![enter image description here]()
Насколько я знаю, все потоки должны останавливаться в точке останова.
Ответы
Ответ 1
Документация читается с недоумением, но это соответствующий блок. От этого зависит, что свойство приостанавливается на потоки, а не на все приложение. Это приведет к удару точки останова в каждом отдельном потоке вместо произвольного неопределенного потока.
![Suspend box checked with Thread radio button selected.]()
- Политика приостановки: все
- Когда точка останова ударяется, все потоки приостанавливаются.
- Приостановить политику: Тема
- Когда точка останова ударяется, поток, на который ударяется точка останова, приостанавливается.