У меня есть следующий кодJava блок синхронизации множественного проверка состояния
public class MyClass {
private boolean condition1;
private boolean condition2;
private boolean condition3;
public void start(){
synchronized (this) {
while(true){
if(!condition1 || !condition2 || !condition3) break;
.....//line #1
if(!condition1 || !condition2 || !condition3) break;
.....//line #2
if(!condition1 || !condition2 || !condition3) break;
.....//line #n
}
}
}
}
условие1 до 3 может быть мутантный другими объектами. То, что я хочу достичь, - это вырваться из цикла сразу, когда любой другой объект установил какое-либо условие в false. Конечно, есть лучший способ, чем положить один лайнер, если проверка перед выполнением каждой строки?
СООБЩЕНИЕ
И что происходит, когда: вы проверяете, что «если условие» является ложным, и до того, как вы выполните строку №1, какой-то другой поток сделал условие неблагоприятным (т.е. сделал условие 1, или условие2, или условие3 как ложное) для вас выполнить строку # 1? –
Подождите! Вы помещаете _loop_ внутри синхронизированного блока? Даже без цикла, похоже, это может быть много кода. Целью блока «synchronized» является выполнение некоторого набора операторов как атома. Если имеет смысл вырваться из синхронизированного блока в точке A или точке B или точке C, то вы делаете там вещи, которые не должны быть атомарными. Ваши «синхронизированные» блоки всегда должны быть как можно меньше. –