java 利用管道实现线程间通信
package com.lb;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.util.Arrays;
public class Test2 {
private PipedInputStream is = null;
private PipedOutputStream os = null;
private boolean run = true;
public static void main(String[] args) {
// TODO Auto-generated method stub
new Test2().t();
}
public void t() {
read.start();
read2.start();
send.start();
}
public Test2() {
is = new PipedInputStream(1);
os = new PipedOutputStream();
try {
is.connect(os);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private Thread read = new Thread() {
byte[] buff = new byte[1024];
public void run() {
try {
while (run) {
is.read(buff);
System.out.println(Thread.currentThread().getName() + "-->" + new String(buff));
Arrays.fill(buff, (byte) 0x00);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
private Thread read2 = new Thread() {
byte[] buff = new byte[1024];
public void run() {
try {
while (run) {
is.read(buff);
System.out.println(Thread.currentThread().getName() + "-->" + new String(buff));
Arrays.fill(buff, (byte) 0x00);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
private Thread send = new Thread() {
public void run() {
try {
while (run) {
String context = "";
context = String.valueOf(((int) (Math.random() * 100)) % 7);
Thread.sleep(500);
System.out.println("snd " + Thread.currentThread().getName() + "-->" + context);
os.write(context.getBytes());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}
java 利用管道实现线程间通信的更多相关文章
- Java多线程编程核心技术---线程间通信(二)
通过管道进行线程间通信:字节流 Java提供了各种各样的输入/输出流Stream可以很方便地对数据进行操作,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据,一个线程发送 ...
- Java 里如何实现线程间通信(转载)
出处:http://www.importnew.com/26850.html 正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程 ...
- Java 里如何实现线程间通信
正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了. 本文涉及到的知识点:thread.join(), object.w ...
- 【转】Java里如何实现线程间通信
正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了. 本文涉及到的知识点:thread.join(), object.w ...
- Java多线程编程(6)--线程间通信(下)
因为本文的内容大部分是以生产者/消费者模式来进行讲解和举例的,所以在开始学习本文介绍的几种线程间的通信方式之前,我们先来熟悉一下生产者/消费者模式. 在实际的软件开发过程中,经常会碰到如下场景 ...
- Java 中如何实现线程间通信
世界以痛吻我,要我报之以歌 -- 泰戈尔<飞鸟集> 虽然通常每个子线程只需要完成自己的任务,但是有时我们希望多个线程一起工作来完成一个任务,这就涉及到线程间通信. 关于线程间通信本文涉及到 ...
- Java多线程编程核心技术---线程间通信(一)
线程是操作系统中独立的个体,但这些个体如果不经过特殊处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一.线程间通信可以使系统之间的交互性更强大,在大大提高CPU利用率的同时还会使程序员对各 ...
- Java笔记(二十)……线程间通信
概述 当需要多线程配合完成一项任务时,往往需要用到线程间通信,以确保任务的稳步快速运行 相关语句 wait():挂起线程,释放锁,相当于自动放弃了执行权限 notify():唤醒wait等待队列里的第 ...
- Java并发——使用Condition线程间通信
线程间通信 线程之间除了同步互斥,还要考虑通信.在Java5之前我们的通信方式为:wait 和 notify.Condition的优势是支持多路等待,即可以定义多个Condition,每个condit ...
随机推荐
- C# 并行线程调用
参考 一.异步委托开启线程 Action<int, int> a = add; a.BeginInvoke(, , null, null);//前两个是add方法的参数,后两个可以为空 C ...
- 13 装备的添加和移除(Unity3D)
本案例主要实现功能如下:1.创建UI界面,包含两个装备栏,四个武器选择栏以及显示人物的属性的文本框2.每一个装备都有自己的属性(AD/AP/AR/MP)3.人物也有自己的基础属性(AD/AP/AR/M ...
- WebApi发布IIS404
1.确定访问路径有没有问题,路由的设置: 2.配置文件中要加 <modules runAllManagedModulesForAllRequests="true" /> ...
- (排序EX)P1583 魔法照片
题解: 需要注意的是,快排完之后并不是按照编号从小到大的顺序输出 #include<iostream>using namespace std;int r=0;void swap(int & ...
- UVA - 11093 Just Finish it up(环形跑道)(模拟)
题意:环形跑道上有n(n <= 100000)个加油站,编号为1~n.第i个加油站可以加油pi加仑.从加油站i开到下一站需要qi加仑汽油.你可以选择一个加油站作为起点,起始油箱为空(但可以立即加 ...
- java切换jdk版本
目的:将jdk1.7切换为jdk1.6 1.原本安装了jdk1.7,环境变量也是配置的1.7相关路径,在cmd下输入[java -version]后,显示 [ C:\Users\Administrat ...
- 下页小希学MVC5+EF6.2 学习记录二
目的:1 学习mvc+ef 2 写下日记也是对自己的督促 从前端的UI开始 MVC分离的比较好,开发顺序没有特别要求,先开发哪一部分都可以,这次我们主要讲解前端UI的部分. ASP.NET MVC抛 ...
- quartz详解4:quartz线程管理
http://blog.itpub.NET/11627468/viewspace-1766967/ quartz启动后有多个线程同时在跑.启动时会启动主线程.集群线程.检漏线程.工作线程.主线程负责查 ...
- PHP实现简易微信红包算法
<?php /** * PHP实现简易的微信红包算法 * @version v1.0 * @author quetiezheng */ function getMoney($total, $pe ...
- QEMU和Firmadyne基本知识|模拟MIPS程序
QEMU QEMU是纯软件实现的一个虚拟化模拟器,几乎可以模拟任何硬件设备,支持多种架构. QEMU安装命令 sudo apt-get install qemu #user mode,包含qemu-m ...