Я работаю над проектом, в котором один поток прошивает еще 4 потока и ждет их завершения. Поток нитей должен иметь возможность останавливать разветвленные нитки в любое время. Чтобы, сделать то же самое, я сделал что-то, как например:Запуск новых потоков из темы
class ForkedThread implements Runnable {
public boolean keepRunning = true;
public void run() {
while(keepRunning is true){
//Do the Job
}
}
}
Теперь, так как keepRunnig является публичным, он может получить доступ из вне и может быть сделано неверно. Мой вопрос: я должен синхронизировать использование keepRunning или его штраф. Во-вторых, эта техника в порядке. Или я должен использовать ThreadPool
для выполнения своей работы. Собственно, использование ThreadPool
увеличит сложность моего кода, чего я не хотел. Пожалуйста помоги.
Это очень проблема с булевыми! В противном случае JVM может свободно читать 'keepRunning' один раз, видеть, что это правда, хранить его в локальном кеше (например, на процессоре) и продолжать читать его там. Если другой поток изменяет его, JVM не обязан обновлять свой кеш; вы могли бы вращаться навсегда. «Неустойчивый» предотвращает это. Это не просто академическое; Я могу сделать это довольно легко на моем двухъядерном ноутбуке. – yshavit
+1 yshavit ... спасибо, и поэтому мы все учимся ... –