效率高,速度快 突破單cpu瓶頸上限java
線程安全:對同一個資源同一時刻操做的問題。 上下文切換安全
synchronized(Object.class) 鎖住的是Class。 synchronized static method,鎖住的是當前Class。併發
synchronized在進入代碼塊的時候分別造成monitorenter,monitorexit指令,在執行monitorenter指令的時候嘗試獲取鎖對象,若是鎖對象沒有被鎖或者是被當前線程鎖住,則鎖的計數器+1,monitorexit指令會讓鎖的計數器-1,減到0則釋放對象的鎖。由此synchronized是可重入的,不會出現本身把本身鎖死.工具
支持公平鎖/非公平鎖 new ReentrantLock 支持獲取鎖中斷機制 tryLock 支持Condition,能夠更好的完成同步協調優化
ReentrantReadWriteLock.writeLock.lock() ReentrantReadWriteLock.writeLock.unlock()ui
Object.wait() Object.notify() Object.notifyAll()this
Semaphore semaphore.aquire() semaphore.release()線程
CountDownLatch countDownLatch.countDown(); countDownLatch.await();對象
Semaphore能夠恢復。 CountDownLatch一次性的不能夠恢復排序
CyclicBarrier cyclicBarrier.awai();
Exchanger 交換兩個線程數據 exchanger.exchange(data1);
BlockingQueue
volatile 1.可見性. 內存分爲主存,工做內存。線程工做的時候會把,從主存讀取,同步到工做內存,更新到工做內存,某個時刻再同步到主存。volatile會保證數據更新當即同步主存,並將其餘線程的工做內存中的值設爲無效。使得其餘線程是當即可見的變動值。
2.禁止指令重排序。 Object obj = new Object();
JVM會自動對字節碼指令進行重排序優化,可能執行順序是123,132,312被修飾的變量會禁止指令重排序。