多執行緒之管道流

2021-06-19 17:47:53 字數 1080 閱讀 9584

前面執行緒間使用wait()、notify()、notifyall()進行同步執行被稱為執行緒間的通訊,不如成為執行緒間協調執行的控制策略。如果需要在兩條執行緒之間進行更多的資訊互動,可以使用管道流進行通訊。

管道流是io與執行緒的結合。

管道流有:管道位元組流pipedinputstream,pipedoutputstream和管道字元流pipedreader,pipedwriter。

使用管道流的流程:

1)建立管道輸入流和管道輸出流。

2)使用管道輸入流或管道輸出流的connect方法把兩個輸入流和輸出流連線起來。

3)將管輸入流、管道輸出流分別傳入兩個執行緒。

4)兩個執行緒可以分別依賴各自的管道輸入流、管道輸出流進行通訊。

見程式

//包含管道輸入流的讀執行緒,

class readerthread extends thread

public readerthread(pipedreader pr)

public void run()

} catch (ioexception e) finally catch (ioexception e)

} }}//包含管道輸出流的寫執行緒

class writerthread extends thread;

//管道字元流

private pipedwriter pw;

public writerthread(){}

public writerthread(pipedwriter pw)

public void run()

}catch(ioexception e)finallycatch(ioexception e)

} }}public class pipedcommunication catch(ioexception e)

}}

執行程式,看到readerthread不斷讀取管道流中的資料,並將資料輸出。

注:通常沒必要使用管道流來控制兩個執行緒之間的通訊,因為兩個執行緒屬於同乙個程序,它們可以非常方便地共享資料,這種方式才是執行緒之間進行資訊交換的最好方式。

多執行緒之執行緒同步

pulse lockobj 表示釋放當前被lock的lockobj,容許其他執行緒呼叫。相當於暫時掛起當前執行緒 wait lockobj 表示等待當前被其他執行緒占用的lockobj。下面的 將會交替執行兩個執行緒 class ticktock console.write tick monitor...

多執行緒之執行緒池

執行緒框架關係 executor 介面 executorservice 介面 繼承 executor abstractexecutorservice 抽象類 實現 executorservice threadpoolexecutor 繼承abstractexecutorservice 過載一系列方法...

多執行緒之執行緒池

首先說一說執行緒池的優點 方便管理,監控執行緒狀態 提高執行緒響應速度 執行緒可以重複使用 executorservice普通排程池核心介面 submit runnable callable future execute runnable void 執行緒池工作流程 當任務到達執行緒池時的工作順序,...