for (int i = 0; i < thread; i++) { new Thread(() -> { while (!unlock) { if (tasks.size() > 0) { try { tasks.take().run(); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); }
Переменная unlock - volatile, и когда я меняю ее на true потоки должны остановиться, но почему-то останавливаются только несколько потоков, а остальные продолжают висеть (проверено через дебагер), но если вставить System.out.println , в конец цикла, вот так
for (int i = 0; i < thread; i++) { new Thread(() -> { while (!unlock) { if (tasks.size() > 0) { try { tasks.take().run(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(unlock); } }).start(); }

То всё начинает работать как надо.В чем причина?