java併發 多執行緒知識點總結

2021-08-18 09:29:22 字數 1075 閱讀 9914

1、web庫類、sevlet天生有多執行緒性。

2、定義任務:使用runnable介面並實現run()方法。   而將runnable (不返回任何值) 物件程式設計工作任務的方式為

thread t = new thread(new task()); 

t.start();

這裡start()會迅速返回,因為每個任務都由不同的執行緒執行,不影響main()中的其他任務操作。

for(int i=0; i<5; i++)

new thread(new task()).start();

也可使用執行緒池來儲存執行緒

executorservice exec = executors.newcachedthreadpool();

for(int i=0; i<5; i++)

exec.execute(new task());

exec.shutdown();

newcachedthreadpool可以使用其他executor代替,比如固定執行緒個數的newfixedthreadpool,還有接受執行緒數量為1的singlethreadexecutor (特殊的newfixedthreadpool),其會序列化所有提交的任務並維護它自己的懸掛任務佇列。

當有大量執行緒並且執行的任務為使用檔案系統時,可以使用singlethreadexecutor 以保證任何執行緒中都只有唯一的任務執行。

3、如果需要執行緒有返回值,則使用callable介面,帶有call函式並且使用exec.submit()來呼叫,而submit方法會產生future物件 (使用callable返回結果的特定型別並進行引數化),然後使用future.get函式來獲取結果。

4、可以使用sleep()來控制任務之間的順序執行,可以跑出interruptedexception異常。但因為順序行為依賴於底層的執行緒機制,在不同的作業系統之間有差異。所以控制任務執行,最好使用同步控制,或者編寫協作例程。

5、呼叫thread.setdaemon可以將執行緒設定為後台執行緒,從而保證在非後台執行緒結束時程式終止並殺死所有後台執行緒。

java 多執行緒知識點總結2

4 synchronized的優化 鎖粗化與鎖消除 死鎖 公平鎖 等待時間最長的先獲取鎖 synchronized是非公平鎖,reentrantlock預設也為非公平鎖,但可以實現公平鎖 同步佇列 所有獲取鎖失敗的執行緒進入同步佇列排隊獲取鎖。等待佇列 呼叫wait 的執行緒置入等待佇列,等待not...

多執行緒知識點總結

多執行緒的問題主要圍繞3個問題處理 1.原子性,2.可見性,3.有序性 1.原子性,不可被其他執行緒打斷的操作。如read.write sychronized 2.可見性 一條執行緒修改了某值,新值對其他執行緒立即可知 普通變數是通過主記憶體完成多執行緒的共享,因此在多執行緒的情況下,很多髒資料。v...

多執行緒 知識點總結二

1.sleep 和wait 方法的區別?sleep 必須指時間 不釋放鎖。wait 可以不指定時間,也可以指定時間 釋放鎖。2.為什麼wait notify notifyall 等方法都定義在object類中?wait 等待,notify 喚醒單個執行緒,notifyall 喚醒所有的執行緒 這些方...