happened before
1 程序次序規(guī)則:一個線程內(nèi),按照代碼順序,書寫在前面的操作先行發(fā)生于書寫在后面的操作;
2 鎖定規(guī)則:一個unLock操作先行發(fā)生于后面對同一個鎖額lock操作;
3 volatile變量規(guī)則:對一個變量的寫操作先行發(fā)生于后面對這個變量的讀操作;
4 傳遞規(guī)則:如果操作A先行發(fā)生于操作B,而操作B又先行發(fā)生于操作C,則可以得出操作A先行發(fā)生于操作C;
5 線程啟動規(guī)則:Thread對象的start()方法先行發(fā)生于此線程的每個一個動作;
6 線程中斷規(guī)則:對線程interrupt()方法的調(diào)用先行發(fā)生于被中斷線程的代碼檢測到中斷事件的發(fā)生;
7 線程終結(jié)規(guī)則:線程中所有的操作都先行發(fā)生于線程的終止檢測,我們可以通過Thread.join()方法結(jié)束、Thread.isAlive()的返回值 手段檢測到線程已經(jīng)終止執(zhí)行;
8 對象終結(jié)規(guī)則:一個對象的初始化完成先行發(fā)生于他的finalize()方法的開始;
推論
將一個元素放入一個線程安全的隊(duì)列的操作Happens-Before從隊(duì)列中取出這個元素的操作
將一個元素放入一個線程安全容器的操作Happens-Before從容器中取出這個元素的操作
在CountDownLatch上的倒數(shù)操作Happens-Before CountDownLatch#await()操作
釋放Semaphore許可的操作Happens-Before獲得許可操作
Future表示的任務(wù)的所有操作Happens-Before Future#get()操作
向Executor提交一個Runnable或Callable的操作Happens-Before任務(wù)開始執(zhí)行操作