(1)管道是单向的。一个线程充当发送者,另一个线程充当接收者。如果需要建立双向通信,可以通过建立多个管道解决。
- 管道
线程之间的通讯问题是指线程之间相互传递信息,这些信息包括数据、控制指令等。我们前面举例中数据共享也是线程的一种通信方式。此外,java语言还提供了线程之间通过管道来进行通信的方式。其结构表示。管道通信具有如下特点:
(2)管道通信是面向连接的。因此在程序设计中,一方线程必须建立起对应的端点,由另一方线程来建立连接。
(3)管道中的信息是严格按照发送的顺序进行传送的。因此接收受方收到的数据和发送方在顺序上完全一致。
- 线程通信实例
package myThread;
import java.io.IOException;
import java.io.PipedReader;
import java.io.PipedWriter;
//发送线程
class SenderThread extends Thread{
PipedWriter pipedWriter;
public SenderThread( ){
pipedWriter = new PipedWriter( );
}
public PipedWriter getPipedWriter( ){
return pipedWriter;
}
public void run( ){
for (int i =0; i<5;i++){
try{
pipedWriter.write(i);
}catch(IOException e){
}
System.out.println("Send: "+i);
}
}
}
//接受线程
class ReceiverThread extends Thread{
PipedReader pipedReader;
public ReceiverThread( SenderThread senderThread) throws IOException{
pipedReader = new PipedReader(senderThread.getPipedWriter( ));
}
public void run( ){
int i=0;
while(true){
try{
i = pipedReader.read();
System.out.println("Received: "+i);
}catch(IOException e){
}
if(i == 4) break;
}
}
}
public class ThreadComm {
public static void main(String[] args) throws IOException {
SenderThread sender = new SenderThread();
ReceiverThread receiver = new ReceiverThread(sender);
sender.start();
receiver.start();
}
}
执行以上代码得到结果