Подтвердить что ты не робот

Как отладить многопоточное приложение в 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

Насколько я знаю, все потоки должны останавливаться в точке останова.

4b9b3361

Ответ 1

Документация читается с недоумением, но это соответствующий блок. От этого зависит, что свойство приостанавливается на потоки, а не на все приложение. Это приведет к удару точки останова в каждом отдельном потоке вместо произвольного неопределенного потока.

Suspend box checked with Thread radio button selected.

  • Политика приостановки: все
    • Когда точка останова ударяется, все потоки приостанавливаются.
  • Приостановить политику: Тема
    • Когда точка останова ударяется, поток, на который ударяется точка останова, приостанавливается.