一、傳統執行緒通訊
synchronized + wait + notify
object類的wait()、notify() 、notifyall()三個方法必須由同步監視器物件來呼叫,分兩種情況:
a)同步方法,該類預設例項(this)就是同步監視器,可以在同步方法中可以直接呼叫
b)同步**塊,同步監視器是synchronized後括號裡的物件,所以必須使用此物件呼叫這三個方法
二、使用
condition
控制線程通訊
lock + condition + await + signal
lock代替同步方法或同步**塊,condition替代同步監視器的功能。
private final lock lock = newreentrantlock();
private final condition con =lock.newcondition();
lock.lock(); con.await(); con.signalall(); lock.unlock():
三、使用阻塞佇列(
blockingqueue
)控制線程通訊
blockingqueue介面主要作為執行緒同步的工具。當生產者試圖向blockingqueue中放入元素,如果佇列已滿,則執行緒被阻塞;當消費者試圖向blockingqueue中取出元素時,若該佇列已空,則執行緒被阻塞。
為空或已滿時
丟擲異常
不同返回值false
阻塞執行緒
指定超時時長
隊尾插入
add(e)
offer(e)
put(e)
offer(e,time,unit)
隊頭刪除並返回
remove()
poll()
take()
poll(time,unit)
獲取不刪除
element()
peek()
實現執行緒3種方式
1 繼承thread實現。2 實現runnable介面。3 實現callable介面,用futuretask接收返回值。總結 其實執行緒最核心的是runnable,因為thread和futuretask都繼承該介面來實現具體功能,即拓展實現。而thread實現的start0 方法,其呼叫本地方法開啟...
建立執行緒的3種方式
1 定義thread類的子類,並重寫該類的run方法,該run方法的方法體就代表了執行緒要完成的任務。因此把run 方法稱為執行體。2 建立thread子類的例項,即建立了執行緒物件。3 呼叫執行緒物件的start 方法來啟動該執行緒。public class mythread extends th...
程序通訊方式 與 執行緒通訊方式
程序通訊方式 與 執行緒通訊方式 程序通訊方式 7種 管道pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。命名管道fifo 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊息佇列messagequeue...