Java基礎361問8問 阻塞佇列的原理

2021-09-11 16:06:58 字數 931 閱讀 8485

我們知道執行緒池是靠阻塞佇列實現的,那麼這個阻塞佇列是具體如何實現阻塞的呢?

說到阻塞我們能想到執行緒的sleep和object類的wait方法,seep是讓執行緒睡眠若干秒再去執行,而wait是讓執行緒休眠如果不通知執行緒恢復,那麼執行緒將一直休眠下去不進行任何操作。

所以我們想到的乙個辦法是通過wait和notify方法休眠和恢復休眠執行緒實現阻塞和恢復

final object obj = new object();

thread a = new thread(new runnable()

try

}catch (exception e)

system.out.println(sum);

}});

a.start();

//睡眠一秒鐘,保證執行緒a已經計算完成,阻塞在wait方法

thread.sleep(1000);

synchronized (obj)

輸出日誌如下:

當前執行緒開始堵塞!

堵塞結束!

45

下面說一種更簡單的辦法locksupport,這個方法也是執行緒池阻塞佇列使用的方法

thread a = new thread(new runnable() 

system.out.println("開始阻塞!");

locksupport.park();

system.out.println("結束阻塞!");

system.out.println(sum);

}});

a.start();

//睡眠一秒鐘,保證執行緒a已經計算完成,阻塞在wait方法

thread.sleep(1000);

locksupport.unpark(a);

Java基礎361問第7問 鍊錶逆序

首先構造乙個node節點結構 public class node接著我們初始化這個鍊錶 node head null,p null head表示頭結點,一般不要輕易修改 for int i 0 i 10 i else 初始化完成之後開始著手逆序這個鍊錶 1 定義p,next,left指標分別代表當前...

巧用loopback模式,定位CAN阻塞問題

最近做的乙個can通訊專案,軟體在開發板上執行的時候跑的沒有一點問題,在專案的pcb上跑的時候can傳送總是阻塞在檢查can郵箱是否空閒裡無法跳出,can傳送函式如下 brief param argument retval uint8 t can txmessage can handletypede...

Java練習 排列 Permutation 問題

輸入個數n,自然數時,n屬於 1,9 輸出1 n所有不重複的排列 數字序列中不允許出現重複的數字 字元時,n 字母表長度,輸出a 第n個字元的全排列。按照排列組合,可知全排列個數為n!對string s abcde 的全排列,遞迴為 1 字首為a s為 bcde 直到s.length 為0.2 字首...