berlaku-sebelum menetapkan bahawa operasi tulis pembolehubah kongsi kelihatan kepada operasi baca urutan lain Ia adalah ringkasan set peraturan untuk keterlihatan dan susunan yang berikut happens-before rules , JMM tidak menjamin bahawa penulisan thread kepada pembolehubah kongsi akan kelihatan kepada bacaan thread lain bagi pembolehubah kongsi.
Tulis kepada pembolehubah sebelum benang membuka kunci m akan kelihatan kepada seterusnya Bacaan pembolehubah oleh utas lain yang dikunci pada m boleh dilihat
static int x; static Object m = new Object(); new Thread(()->{ synchronized(m) { x = 10; } },"t1").start(); new Thread(()->{ synchronized(m) { System.out.println(x); } },"t2").start(); /* 运行结果: 10 */
Tulisan pembolehubah tidak menentu oleh utas ialah boleh dilihat dengan bacaan seterusnya pembolehubah oleh utas lain
volatile static int x; new Thread(()->{ x = 10; },"t1").start(); new Thread(()->{ System.out.println(x); },"t2").start(); /* 运行结果: 10 */
Tulisan kepada pembolehubah sebelum utas bermula, bacaan pembolehubah selepas utas bermula kelihatan
static int x; x = 10; new Thread(()->{ System.out.println(x); },"t2").start(); /* 运行结果: 10 */
Benang t1 menulis pembolehubah sebelum mengganggu t2 (gangguan bacaan pembolehubah selepas utas lain mengetahui bahawa t2 terganggu). boleh dilihat (melalui t2.interrupted atau t2.isInterrupted)
static int x; Thread t1 = new Thread(()->{ x = 10; },"t1"); t1.start(); t1.join(); System.out.println(x); /* 运行结果: 10 */
Tulisan nilai lalai pembolehubah (0, palsu, null) kelihatan kepada bacaan daripada pembolehubah oleh urutan lain
static int x; public static void main(String[] args) { Thread t2 = new Thread(()->{ while(true) { if(Thread.currentThread().isInterrupted()) { System.out.println(x); break; } } },"t2"); t2.start(); new Thread(()->{ sleep(1); x = 10; t2.interrupt(); },"t1").start(); while(!t2.isInterrupted()) { Thread.yield(); } System.out.println(x); } /* 运行结果: 10 */
Ia adalah transitif Jika x hb->
Atas ialah kandungan terperinci Apakah yang Berlaku sebelum peraturan untuk benang java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!