1. 程式人生 > >2018第23周總結

2018第23周總結

變量 對象 工具 開發 condition 中斷 效率 情況 中移動

Java操作系統硬件的方法Unsafe

Java中通過Unsafe類native方法,通過JNI繞過JVM來操作系統cpu、內存等硬件,實現更高效率的操作,在Java基礎類庫和第三方開源庫中都有廣泛的應用,比如JUC、Netty、Kafka等。通過Unsafe你可以自己內存管理、實例化對象、操作類、對象、變量、數組,可以實現多線程同步的基礎、內存屏障等。Java9中移動了Unsafe類包並增加了大量的註釋,對它又放開了些。

Java並發實現線程阻塞原語LockSupport

LockSupport工具類通過靜態方法提供了多線程間阻塞喚醒原語,和CAS操作一樣是JUC鎖的基礎,它的原理是通過類似信號量的permit【值為0或1】控制線程是否阻塞,調用unpack將其值設置為1,調用pack方法時消費permit,若本身permit已為0則阻塞當前線程。它與原來Ojbect的wait、notify方法阻塞線程的好處時,不用像或者一樣必須在同步塊中,並且可以先在某些特殊情況下即使先執行了unpack再park也不會導致線程意外阻塞。

JUC包中的鎖框架

JUC包中的鎖,包括:Lock接口,ReadWriteLock接口,LockSupport阻塞原語,Condition條件,AbstractOwnableSynchronizer/AbstractQueuedSynchronizer/AbstractQueuedLongSynchronizer三個抽象類,ReentrantLock獨占鎖,ReentrantReadWriteLock讀寫鎖。由於CountDownLatch,CyclicBarrier和Semaphore也是通過AQS來實現的。

線程中斷總結

線程中斷是開發者為了響應用戶取消任務的請求讓線程安全退出的一種推薦做法。它通過一個中斷標記來讓線程知道是否有其它線程請求讓它中斷,然後開發者讓線程在合適的時候讓自己退出。即不會造成不能停止線程導致的用戶不能取消任務問題,也不會因為強行停止任務而導致數據不一致等問題。

2018第23周總結