Java线程——线程间通信

因为进程之间不能互访对方的地址空间,在进程之间传替消息只能采用类似于远程调用的手段。这就让多线程之间的通信更加显得有优势。
目录
(1)、传递二进制消息
(2)、传递字符信息

正文
(1)、传递二进制消息
主要用到java.io.PipedOutputStream拥有允许指定输入管道流的构造方法
java.io.PipedInputStream拥有一个指定输出管道流的构造方法。
案例如下:

import java.io.PipedOutputStream;
import java.io.PipedInputStream;
import java.io.IOException;

public class CommunicationByPipeBytes
{
      static PipedOutputStream pos=null;
    static PipedInputStream pis=null;

    public static void main(String[] args) throws IOException
    {
          pos=new PipedOutputStream();
        pis=new PipedInputStream(pos);

        Thread thread1=new Thread()
        {
            public void run()
            {
                  try
                  {
                      pos.write("hello".getBytes());
                      pos.flush();
                  }
                  catch(IOException ioe)
                  {
                      ioe.printStackTrace();
                  }
            }
        };
        thread1.start();

        Thread thread2=new Thread()
        {
               public void run()
               {
                   try
                   {
                       byte[] bytes=new byte[pis.available()];
                       pis.read(bytes,0,bytes.length);
                       System.out.println(new String(bytes));
                   }
                   catch(IOException ioe)
                   {
                       ioe.printStackTrace();
                   }    
               }
        };
        thread2.start();
    }
}

运行结果:

E:\>java CommunicationByPipeBytes
hello

这个案例实现了二进制信息的传递:线程Thread1通过管道字节流向线程Thread2传递字符“hello”的字节。

(2)、传递字符信息
利用java.io.PipedWriter拥有指定允许输入管道字符流的构造方法
java.io.PipedReader拥有一个指定输出管道字符流的构造方法。
案例如下:

import java.io.PipedWriter;
import java.io.PipedReader;
import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.IOException;

public class CommunicationByPipeCharacters
{
      static PipedWriter pw=null;
    static PipedReader pr=null;
    static BufferedWriter bw=null;
    static BufferedReader br=null;

    public static void main(String[] args) throws IOException
    {
          pw=new PipedWriter();
        pr=new PipedReader(pw);
        bw=new BufferedWriter(pw);
        br=new BufferedReader(pr);

        Thread thread1=new Thread()
        {
            public void run()
            {
                  try
                  {
                      bw.write("hello",0,"hello".length());
                      bw.newLine();
                      bw.flush();
                  }
                  catch(IOException ioe)
                  {
                      ioe.printStackTrace();
                  }
            }
        };
        thread1.start();

        Thread thread2=new Thread()
        {
               public void run()
               {
                   try
                   {
                       System.out.println(br.readLine());
                   }
                   catch(IOException ioe)
                   {
                       ioe.printStackTrace();
                   }    
               }
        };
        thread2.start();
    }
}

运行结果同上。只是使用的方式有些不一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值