1. 程式人生 > >多線程進階

多線程進階

通道 exceptio 創建 自帶 核心內容 沒有 api locking 靜態成員變量


主題:多線程進階

多線程的一些核心內容以及要關註的細節。

一、線程的實現

繼承thread類重寫run()方法和實現Runnable接口實現run()方法

註意點:new線程實例時建議加線程名和要處理下線程的中斷異常([InterruptedException])

二、不得不提的[ThreadLocal]

顧名思義:線程局部變量,提高性能,可以理解為對線程的“工廠模式”。

註意點:不能解決多線程環境下的數據共享的問題。

使用[ThreadLocal],一般都是聲明在靜態變量中。如果不斷的創建[ThreadLocal]而且沒有調用其remove方法,將會導致內存泄露。如果是static的[ThreadLocal],一般不需要調用remove。

三、線程的同步與鎖

普通鎖:Synchronized。方法上(靜態或非靜態)加。

讀寫鎖:接口[ReadWriteLock]、實現[ReentrantReadWriteLock]。性能高,一般建議用這個。

四、線程的調度

wait/(notify/notifyAll())機制

同在Synchronized代碼塊中有效。

wait/sleep的區別

wait釋放鎖,sleep沒有。

線程的讓步yield()和合並join()

五、阻塞隊列

java.util.concurrent.[BlockingQueue]、[ArrayBlockingQueue], [DelayQueue], [LinkedBlockingQueue], [PriorityBlockingQueue], [SynchronousQueue]

為多線程的排隊等候的業務場景開辟了便捷通道,非常有用

六、線程池

Executors、[ExecutorService和Future]

Future的get ()和get (long timeout, [TimeUnit] unit)方法

對有高性能要求的中間件或者定時任務的實現非常有用。如我們的R系統

最後火青還給大夥總結要註意以下三點:

1、編碼時要註意靜態或者非靜態成員變量等是否有線程不安全問題。

2、不要隨便使用Synchronized。

3、盡量用java5的自帶的api實現多線程。

多線程進階