執行緒通訊 3種方式

2021-08-19 21:07:30 字數 1019 閱讀 1987

一、傳統執行緒通訊

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...