Java 併發小結

API

低級別

Thread

Java 併發小結

1、實例化

1)實例化Runnable,構造Thread

2)構造Thread子類,實現run方法

2、重要方法

interrupt

實例方法

1)void interrupt()

如:t.interrupt() 主線程中斷線程t,設置中斷狀態標誌

2)boolean isInterrupted()

如:t.isInterrupted() 主線程查詢線程t中斷狀態,不會設置中斷狀態標誌

靜態方法

1)static boolean interrupted()

如:Thread.interrupted() 如果已被中斷,清除當前線程的中斷狀態標誌

高級別(5.0)

在java.util.concurrent包內

1、Lock

1)比隱含鎖的優勢在於,可以退回鎖,以解決死鎖問題

2、Executors

1)將線程管理和創建,同業務代碼分離;

2)使用工作線程可以最小化線程創建的開銷;

3)固定線程池可以避免系統超載

4)Fork/Join 利用多處理器提升性能,將任務劃分為遞歸的更小任務

3、Concurrent Collections

1)BlockingQueue 先進先出隊列

2)ConcurrentMap 原子操作,避免低效的同步

4、atomic

在一個變量上支持原子操作

5、ThreadLocalRandom

減少多線程徵用,獲得更好的性能

同步

問題

沒有同步造成的問題:1、線程干擾(導致結果不一致);2、內存一致性

同步造成的問題:1、死鎖,多個線程等待對方資源而阻塞;2、飢餓,共享資源長期被佔用;3、活鎖,多個線程等待對方響應而非常繁忙,沒有阻塞

解決

1、synchronized 同步

2、原子訪問(避免內存一致性問題)

1)引用變量和大部分基本變量的讀和寫是原子操作(除了long和double)

2)聲明為volatile的所有變量的讀和寫是原子操作(包括long和double)

3、immutable Object

4、滿足happens-before,即一條語句寫,對另一條語句可見。

1)synchronized方法退出,其他線程對synchronized方法調用

2)一個線程釋放內部鎖,另一個線程獲取同一個內部鎖

3)聲明為volatile的所有變量


分享到:


相關文章: