多線程的雜篇

thread的join方法是運行該方法的線程必須等到join方法的線程運行完畢才能讓當前線程繼續運行。原理是校驗join線程是否存活,存活就一直循環等待,直到線程over了,才繼續向下運行。
volitile 是讓線程間進行通信的,解決了編譯器的重排序,是程序按照正常的執行流程運行,java

jstat 命令監視虛擬機各類運行狀態,包括垃圾收集,內存,類裝載
jstat -gc pid 能夠監視堆的各個分區內存信息數組

jstack :堆棧跟蹤工具
自定義類加載器 須要重寫findclass()安全

concurrenthashmap()的put操做是先進行hash找到分段,而後分段上加鎖,在安全上和效率上是能夠的。 併發狀況下使用,不要使用hashmap
concurrentLinkedQueue 線程安全的隊列,它的性能好於blockingqueue多線程

java裏的阻塞隊列
arrayBlockingQueue: 數組結構的有界阻塞隊列
linkedBlockingQueue: 鏈表結構組成的有界隊列,linkedTransferQueue :一個由鏈表結構組成的無界阻塞隊列,linkedBlockingDeque:鏈表組成的雙向阻塞隊列併發

Fork/join 框架(多線程):
目的是把一個大任務 進行拆分,每一個子任務單獨運行,任務在調用join方法得到該任務的結果,須要繼承recursiveTask類,重寫compute()方法
線程間交換數據的exchanger 能夠用來校驗2個線程操做處理一樣的數據後是不是一致的。框架

控制併發線程數的semaphore:例如一條公路上只能有100輛車通行,其它的車只能在路口等待。工具

CyclicBarrier 和 CountDownLatch的區別:性能

CountDownLatch的計數器只能用1次,而CyclicBarrier 的計數器能夠使用rest()方法重置,因此CyclicBarrier 能處理更爲複雜的業務場景。線程

相關文章
相關標籤/搜索