java:管道流(线程间管道流)

class Send implements Runnable{

	PipedOutputStream pos = null;

	public Send()
	{
		this.pos = new PipedOutputStream();
	}

	public PipedOutputStream getPipedOutputStream()
	{
		return this.pos;
	}

	@Override
	public void run() {
		// TODO 自动生成的方法存根
		String str = "hello world!!!";
		try {
			this.pos.write(str.getBytes());
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		try {
			this.pos.close();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}

}

class Receive implements Runnable{

	PipedInputStream pis = null;

	public Receive(){
		this.pis = new PipedInputStream();
	}

	public PipedInputStream getPipedInputStream()
	{
		return this.pis;
	}

	@Override
	public void run() {
		// TODO 自动生成的方法存根
		byte b[] = new byte[1024];
		int len = 0;
		try {
			len = this.pis.read(b);
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		try {
			this.pis.close();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		System.out.println(new String(b,0,len) );
	}

}

public class PipedOutputStreamDemo {

	public static void main(String[] args) throws Exception {
		// TODO 自动生成的方法存根
		Send send =  new Send();
		Receive rec = new Receive();
		send.getPipedOutputStream().connect(rec.getPipedInputStream());
		new Thread(send).start();
		new Thread(rec).start();
	}

}

  

时间: 2024-10-14 13:09:44

java:管道流(线程间管道流)的相关文章

Java笔记七.线程间通信与线程生命的控制

线程间通信与线程生命的控制 一.线程通信方法 Java是通过Object类的wait.notify.notifyAll这几个方法来实现进程键的通信.由于所有的类都是从Object继承的,因此在任何类中都可以直接使用这些方法. wait:告诉当前线程放弃监视器并进入睡眠状态,知道其他线程进入同一监视器并调用notify为止; notify:唤醒同一对象监视器中调用wait的第一个线程.用于类似饭馆有一个空位后通知所有等候就餐的顾客中的第一位可以入座的情况: notifyAll:唤醒同一对象监视器中

Java多线程中线程间的通信

一.使用while方式来实现线程之间的通信 package com.ietree.multithread.sync; import java.util.ArrayList; import java.util.List; public class MyList { private volatile static List list = new ArrayList(); public void add() { list.add("apple"); } public int size() {

JAVA多线程之线程间的通信方式

一,介绍 本总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码. 二,线程间的通信方式 ①同步 这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信. 参考示例: public class MyObject { synchronized public void methodA() { //do something.... } synchronized public void methodB()

Java并发之线程间协作Object的wait()、notify()、notifyAll()

wait().notify()和notifyAll()是Object类中的方法: 1)wait().notify()和notifyAll()方法是本地方法,而且为final方法,无法被重写. 2)调用某个对象的wait()方法能让当前线程堵塞.而且当前线程必须拥有此对象的monitor(即锁) 3)调用某个对象的notify()方法可以唤醒一个正在等待这个对象的monitor的线程,假设有多个线程都在等待这个对象的     monitor.则仅仅能唤醒当中一个线程: 4)调用notifyAll(

Java并发:线程间同步-条件队列和同步工具类

转载请注明出处: jiq?钦's technical Blog - 季义钦 线程之间的同步,除了互斥(前面介绍的互斥锁)之外,还存在协作关系,下面我们就介绍一下java线程间常见的一些协作方式. 一.内置条件队列 正如每个Java对象都可以作为一个内置锁,每个对象也可以作为一个条件队列,称为内置条件队列,Object.wait().notify()/notifyAll()构成了内置条件队列的API. 需要注意的是,调用任何对象X的内置条件队列的API都必须要先获得该对象X的内置锁. 1.API介

Java 如何实现线程间通信?(notify、join、CountdownLatch、CyclicBarrier、FutureTask、Callable )

转自:https://mp.weixin.qq.com/s?__biz=MzI4Njc5NjM1NQ==&mid=2247486499&idx=1&sn=d3f2d6959df7299bfbe2d663f6c4d353&chksm=ebd6330fdca1ba19316e89bedcaab01be8fdb81ba7ba3a9456c51fa28e80b2b1b33265d513ee&mpshare=1&scene=23&srcid=0113bUJHO

Java多线程 二 线程间通信

线程间通信: 多个线程在处理同一资源,但是 等待唤醒机制 涉及的方法: 1.wait() 让线程处于冻结状态,被wait的线程会被存储到线程池中. 2.notify() 唤醒线程池中的一个线程(任意) 3.notifyAll() 唤醒线程池中的所有线程.. 这些方法都必须定义在同步中, 因为这些方法是用于操作线程状态的方法. 必须明确到底操作的那个锁上的线程. 为什么操作线程的方法wait notify notifyAll定义在了Object中. 因为这些方法是监视器方法,监视器其实就是锁. 锁

java并发编程 线程间协作

线程间协作 1. 等待和通知 等待和通知的标准形式 等待方: 获取对象锁 循环中判断条件是否满足,不调用wait()方法 条件满足执行业务逻辑 通知方: 获取对象所 改变条件 通知所有等待在对象的线程 2. wait.notify/notifyAll wait:导致当前线程等待,直到有其他线程调用当前同步监视器的notify()或notifyall()方法来唤醒此线程.wait()方法有三种形式--无时间参数的wait(一直等待,直到其他线程通知),带毫秒参数的waut()和带毫秒和纳秒参数的w

java中关于线程间协作所用关键字synchronized,wait,notify的用法

wait/notify()关键字适用于一个线程通知另一个线程所需的条件状态已就绪,最常用于线程在循环中休眠直到获取特定条件的场景. 例如,一个线程一直等待直到队列中有一个组件能够处理:当组件添加到队列时,另一个线程能够唤醒这个等待的线程. 如下代码演示线程间的协作: package thread_waitnotify; public class ProductFactory { class Worker implements Runnable { private final Object loc

Java并发:线程间数据传递和交换

一.通过SynchronousQueue方式实现线程间数据传递: 线程A与线程B共同持有一个SynchronousQueue的引用,线程B调用take方法,阻塞以等待: 线程A运行后计算出结果,将结果put到queue中; public class SynchronousQueueTest { public static void main(String[] args) throws InterruptedException { SynchronousQueue<Integer> queue