Ok, donc je viens de lire cette question Do you ever use the volatile keyword in Java?, et j'utilise une variable volatile afin d'arrêter une boucle. J'ai aussi vu cette référence, http://www.javamex.com/tutorials/synchronization_volatile.shtml. Maintenant, l'article dit que les variables volatiles ne sont pas bloquantes. En outre, il dit qu'il ne peut pas être utilisé pour la concurrence dans une séquence lecture-mise à jour-écriture. Ce qui est logique parce qu'ils ne bloquent pas.Java volatile pour la concurrence
Puisque les variables volatiles ne sont jamais mises en cache, est-il plus rapide d'utiliser simplement la synchronisation pour arrêter la boucle (à partir du lien précédent)?
Edit: En utilisant une solution synchronisée
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");
}
}
De quelle boucle parlez-vous? Veuillez inclure un exemple de votre utilisation proposée de 'synchronized' dans la question. – erickson
Aller au premier lien que j'ai posté et chercher la réponse la mieux notée. – Albinoswordfish
vous attendez beaucoup de vos lecteurs. La prochaine fois, il suffit d'inclure l'exemple dans la question ... –