Как пример кода, как показано ниже.Запустить runnable пулом потоков, следует ли использовать volatile?
Я собираюсь использовать пул потоков для запуска объекта TestRunnable в период.
Должен ли я объявить переменную total как изменчивой?
public class TestRunnable implements Runnable {
private int total;
@Override
public void run() {
if (total > 10) {
return;
} else {
total += 1;
System.out.print("Run in times: " + total);
}
}
}
Я думаю, что решающим моментом является: что вы на самом деле делаете ** с переменной 'total'? Если вы используете его только внутренне (для оператора печати), и если вы отправляете каждый экземпляр 'TestRunnable' только * один раз * в пул потоков, то вам не нужно' volatile'.Но ** если ** существует, например, метод getTotal, который каким-либо образом раскрывает эту переменную, тогда может потребоваться дополнительная синхронизация (или, в простейшем случае, «volatile»). – Marco13