java IO 管道流 关于两个线程通信的问题
2014-04-16 10:09
399 查看
管道流
管道流主要可以进行两个线程之间的通信。
PipedOutputStream 管道输出流
PipedInputStream 管道输入流
send类:负责消息发送
Recive 类 :负责消息接收
Connect :测试类 测试两个线程通信
【运行结果】:
发送的内容:第1次:你好!
接受的内容:第1次:你好!
发送的内容:第2次:你好!
接受的内容:第2次:你好!
发送的内容:第3次:你好!
接受的内容:第3次:你好!
发送的内容:第4次:你好!
接受的内容:第4次:你好!
......
管道流主要可以进行两个线程之间的通信。
PipedOutputStream 管道输出流
PipedInputStream 管道输入流
send类:负责消息发送
package wgl.message; import java.io.IOException; import java.io.PipedOutputStream; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Send implements Runnable{ private String message; private int counter ; private PipedOutputStream output ; public Send(PipedOutputStream out ,String message){ output = out; this.message = message; this.counter = 1; } @Override public void run() { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { if(counter==15){ } sendMessage("第"+(counter++)+"次:"+message); } },new Date(), 2000); } public void sendMessage(String message){ try { System.out.println("发送的内容:"+message); output.write(message.getBytes()); } catch (IOException e) { e.printStackTrace(); } } public String getMessage() { return message; } public PipedOutputStream getOutput() { return output; } }
Recive 类 :负责消息接收
package wgl.message; import java.io.IOException; import java.io.PipedInputStream; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Recieve implements
Runnable{ private PipedInputStream in; public Recieve(PipedInputStream in){ this.in = in; } @Override public void run() { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { recieved(); } },new Date(), 200); } public void recieved(){ byte[] b = new byte[1000]; int len = 0; try { len = this.in.read(b); } catch (IOException e) { e.printStackTrace(); } System.out.println("接受的内容:"+new String(b, 0, len)); } public PipedInputStream getIn() { return in; } }
Connect :测试类 测试两个线程通信
package wgl.message; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; public class Connect { public static void main(String[] args) throws IOException{ PipedOutputStream out = new PipedOutputStream(); PipedInputStream in = new PipedInputStream(); final Send send = new Send(out,"你好!"); final Recieve recieve = new Recieve(in); send.getOutput().connect(recieve.getIn()); Thread t1 = new Thread(send); Thread t2 = new Thread(recieve); t1.start(); t2.start(); } }
【运行结果】:
发送的内容:第1次:你好!
接受的内容:第1次:你好!
发送的内容:第2次:你好!
接受的内容:第2次:你好!
发送的内容:第3次:你好!
接受的内容:第3次:你好!
发送的内容:第4次:你好!
接受的内容:第4次:你好!
......
相关文章推荐
- java 管道流的读写操作 用于两个线程之间的通信
- java 管道流的读写操作 用于两个线程之间的通信
- java 管道流的读写操作 用于两个线程之间的通信
- JAVA中关于线程通信安全问题
- 关于Java交换两个对象的问题
- Java IO学习【2】一个关于换行、续写的的小问题
- Linux 2. 关于pthread_cond_signal 唤醒两个线程的问题
- 【Java】线程wait() notify()通信 实现生产者 消费者问题
- 关于“ java.io.FileNotFoundException: C:\Program%20Files\Apache%20Software%20Foundation\”的类似问题
- 关于Java和.NET之间的通信问题(JSON)
- Thinking in Java---线程通信+三种方式实现生产者消费者问题
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)
- Java中创建线程的两个方法____解决火车票或售票问题
- 关于java Socket与C#通信编码问题小结
- Java实现--线程间通信问题案例
- 关于C++和JAVA,AES/ECB/PKCS5Padding 互相通信的问题
- 关于Java交换两个对象的问题
- 关于JAVA线程的面试问题~
- Android(java)学习笔记70:同步中的死锁问题以及线程通信问题
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)