Heim >Java >javaLernprogramm >Beispiele dafür, wie volatile die Thread-Sicherheit in Java nicht garantieren kann
Der folgende Editor bringt Ihnen einen Artikel, in dem Volatilität die Thread-Sicherheit in Java nicht garantieren kann (Erklärung mit Beispielen). Der Herausgeber findet es ziemlich gut, deshalb teile ich es jetzt mit Ihnen und gebe es als Referenz. Folgen wir dem Editor und werfen wir einen Blick darauf
Heute habe ich codiert und untersucht, ob das Schlüsselwort „volatil“ die Thread-Sicherheit garantieren kann. Nach dem Üben kann „volatile“ die Thread-Sicherheit nicht garantieren, sondern nur die Sichtbarkeit. Jeder Thread liest die Daten aus dem Hauptspeicher und nicht aus dem Cache. Der Code wird wie folgt angehängt. Wenn die Synchronisierung entfernt wird, ist das Ergebnis jedes Threads chaotisch, aber das Ergebnis ist korrekt, wenn Sie es hinzufügen.
/** * * 类简要描述 * * <p> * 类详细描述 * </p> * * @author think * */ public class VolatileThread implements Runnable { private volatile int a = 0; @Override public void run() { // TODO Auto-generated method stub // synchronized (this) { a = a + 1; System.out.println(Thread.currentThread().getName() + ":----" + a); try { Thread.sleep(100); a = a + 2; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ":----" + a); // } } }
/** * * 类简要描述 * * <p> * 类详细描述 * </p> * * @author think * */ public class VolatileMain { public static void main(String[] args) { VolatileThread s = new VolatileThread(); Thread t1 = new Thread(s); Thread t2 = new Thread(s); Thread t3 = new Thread(s); Thread t4 = new Thread(s); t1.start(); t2.start(); t3.start(); t4.start(); /* 同步的结果 Thread-2:----1 Thread-2:----3 Thread-0:----4 Thread-0:----6 Thread-3:----7 Thread-3:----9 Thread-1:----10 Thread-1:----12*/ /* 去掉同步的结果 Thread-0:----1 Thread-1:----2 Thread-2:----3 Thread-3:----4 Thread-0:----8 Thread-3:----10 Thread-1:----10 Thread-2:----12*/ } }
Das obige ist der detaillierte Inhalt vonBeispiele dafür, wie volatile die Thread-Sicherheit in Java nicht garantieren kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!