Java线程——线程间通信

来源:互联网 发布:微表情测试软件 编辑:程序博客网 时间:2024/05/14 04:32

因为进程之间不能互访对方的地址空间,在进程之间传替消息只能采用类似于远程调用的手段。这就让多线程之间的通信更加显得有优势。
目录
(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 CommunicationByPipeByteshello

这个案例实现了二进制信息的传递:线程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();    }}

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

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 氯丁胶粘鞋 氯丁胶稀释液 氯丁胶 价格 氯丁胶稀释液价格 氯丁胶100 氯丁胶黏剂 阳离子氯丁胶乳液 氯丁胶a90 氯丁胶胶黏剂 防水氯丁胶 水性氯丁胶乳 氯丁胶乳价格 氯丁胶怎么用 氯丁胶胶水 l氯丁胶 氯丁胶粘接剂 氯丁胶性能 氯丁胶特性 氯丁胶防水砂浆 接枝氯丁胶 氯丁胶乳配方 杜邦氯丁胶乳 氯丁胶乳沥青防水涂料 氯丁胶乳防水砂浆价格 氯丁胶乳防水砂浆厂家 氯丁胶防水涂料价格 氯丁胶防水涂料配方 氯丁橡胶厂家 氯丁橡胶 价格 氯丁橡胶多少钱一吨 氯丁橡胶 电缆 氯丁橡胶性能 氯丁橡胶密封圈 氯丁橡胶配方 氯丁橡胶的价格 氯丁橡胶乳液 氯丁橡胶胶粘剂 氯丁橡胶a-90 氯丁橡胶价格行情 氯丁密封胶 氯丁橡胶浆