Хорошо, я только что прочитал этот вопрос Вы когда-нибудь использовали ключевое слово volatile в Java? , и я использую переменную volatile для остановки цикла. Также я видел эту ссылку, http://www.javamex.com/tutorials/synchronization_volatile.shtml. Теперь в статье говорится, что переменные переменные неблокируют. Также говорится, что его нельзя использовать для параллелизма в последовательности чтения-обновления-записи. Что имеет смысл, потому что они не блокируют.
Поскольку энергозависимые переменные никогда не кэшируются, быстрее ли просто использовать синхронизацию для остановки цикла (по более ранней ссылке)?
Редактировать: Использование синхронизированного решения
public class A{
private boolean test;
public A(){
test = true;
}
public synchronized void stop(){
test = false;
}
public synchronized boolean isTrue(){
return test;
}
}
public class B extends Thread {
private A a;
public B(A refA){
a = refA;
}
public void run(){
//Does stuff here
try{
sleep(1000);
}
catch(Exception e){}
a.stop();
}
public static void main(String [] args){
A TestA = new A();
B TestB = new B(TestA);
TestB.start();
while(TestA.isTrue()){
//stay in loop
System.out.println("still in loop");
}
System.out.println("Done with loop");
}
}