Sto cercando di eseguire il seguente codice con punti di rottura come segue:IntelliJ - non fermarsi su tutti i punti di interruzione nel codice multithreading
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Starting"); //breakpoint here
}
}).start();
int i = 10;
i++; //breakpoint here
quando questo codice viene eseguito solo il parametro i ++ punto di interruzione viene colpito ... Se rimuovo quello, il punto di interruzione dell'altro thread verrebbe colpito correttamente. Perché si verifica questo comportamento strano?
Personalmente ritengo che questa sia una condizione di gara. Nel mio caso * resume * fa ancora ** non ** innescare il breakpoint sul nuovo thread. L'unico modo per risolvere è quello di non rompere giusto prima di iniziare una nuova discussione. Quindi tutto funziona. – kervin
Il criterio di sospensione sui punti di interruzione è impostato su "Tutto" (anziché su "Discussione")? –
Sì, lo sono tutti. Posso attivare il problema semplicemente spostando il punto di interruzione più vicino/più lontano dall'inizio della discussione, in modo che da solo confermi una condizione di competizione di qualche tipo. – kervin