I'm having a strange issue with multiple threads and breakpoints in IntelliJ IDEA 14.0.2. Code after the breakpoint is executed before it stops on it.
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"); } } }
When I put a breakpoint (Suspend All) at line 12, synchronized (this.lock)
, System.out.println
still executes (sometimes several times). Here's a screenshot:
As far as I know, all threads should stop at the breakpoint.
Run the program in debug modeClick the Run icon in the gutter, then select Modify Run Configuration. Enter arguments in the Program arguments field. Click the Run button near the main method. From the menu, select Debug.
Press the little gearwheel and you will see all active threads. And on each breakpoint you can set the Suspend Policy. You can either make the Thread alternative the default for all breakpoints or you can set them individually on each breakpoint.
Parallel processing using many threads can greatly improve program performance, but it may also make debugging more difficult because you're tracking many threads. Multithreading can introduce new types of potential bugs.
The documentation reads confusingly, but this is the relevant block. What it distills down to is setting the property to suspend on threads, and not the entire application instead. This will cause you to hit the break point on each individual thread instead of an arbitrary, indeterminate thread.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With