我們知道執行緒池是靠阻塞佇列實現的,那麼這個阻塞佇列是具體如何實現阻塞的呢?
說到阻塞我們能想到執行緒的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 字首...