java线程间的通信方式

1.同步

  synchronized

2.轮询

  while   volatile

3.wait/notify机制

  syncrhoized加锁的线程的Object类的wait()/notify()/notifyAll()

  ReentrantLock类加锁的线程的Condition类的await()/signal()/signalAll()

4.管道通信

  使用java.io.PipedInputStream 和 java.io.PipedOutputStream进行通信

  通过管道,将一个线程中的消息发送给另一个

原文地址:https://www.cnblogs.com/mengchunchen/p/10575357.html

时间: 2024-10-13 13:05:28

java线程间的通信方式的相关文章

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

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

进程与线程间的通信方式

一.进程间的通信方式 # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. # 有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信. # 信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问.它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源.因此,主要作为进程间以及同一进程内不同线程之间的同步手

JAVA线程间共享变量

import java.util.HashMap; import java.util.Map; import java.util.Random; public class ThreadScopeShareData { static Map<Thread, Integer> dataMap = new HashMap<Thread, Integer>(); public static void main(String[] args) { for (int i = 0; i <

Java——线程间通信问题

 wait和sleep区别: 1.wait可以指定时间可以不指定.     sleep必须指定时间. 2.在同步时,对cpu的执行权和锁的处理不同.     wait:释放执行权,释放锁.     sleep:释放执行权,不释放锁. /* * 等待/唤醒机制 * 设计的方法: * 1.wait():让线程处于等待状态,被wait的线程会被存储到线程池中. * 2.notify():唤醒线程池中的一个线程(任意) * 3.notifyAll():唤醒线程池中的所有线程. * 这些方法都必须定义

说说Java线程间通信

序言 正文 [一] Java线程间如何通信? 线程间通信的目标是使线程间能够互相发送信号,包括如下几种方式: 1.通过共享对象通信 线程间发送信号的一个简单方式是在共享对象的变量里设置信号值:线程A在一个同步块里设置boolean型成员变量hasDataToProcess为true,线程B也在同步块里读取hasDataToProcess这个成员变量:线程A和B必须获得指向一个MySignal共享实例的引用,以便进行通信:如果它们持有的引用指向不同的MySingal实例,那么彼此将不能检测到对方的

JAVA线程间协作:wait.notify.notifyAll

JAVA的进程同步是通过synchronized()来实现的,须要说明的是,JAVA的synchronized()方法相似于操作系统概念中的相互排斥内存块.在JAVA中的Object类型中.都是带有一个内存锁的,在有线程获取该内存锁后.其它线程无法訪问该内存.从而实现JAVA中简单的同步.相互排斥操作. 明确这个原理.就能理解为什么synchronized(this)与synchronized(static XXX)的差别了.synchronized就是针对内存区块申请内存锁,thiskeywo

Java线程间通信之wait/notify

Java中的wait/notify/notifyAll可用来实现线程间通信,是Object类的方法,这三个方法都是native方法,是平台相关的,常用来实现生产者/消费者模式.先来我们来看下相关定义: wait() :调用该方法的线程进入WATTING状态,只有等待另外线程的通知或中断才会返回,调用wait()方法后,会释放对象的锁. wait(long):超时等待最多long毫秒,如果没有通知就超时返回. notify() : 通知一个在对象上等待的线程,使其从wait()方法返回,而返回的前

【JAVA线程间通信技术】

之前的例子都是多个线程执行同一种任务,下面开始讨论多个线程执行不同任务的情况. 举个例子:有个仓库专门存储货物,有的货车专门将货物送往仓库,有的货车则专门将货物拉出仓库,这两种货车的任务不同,而且为了完成任务需要彼此相互合作,如果仓库中没有货物了而将货物拉出仓库的货车先到达了,那么它只有先等待其它货车将货物送入仓库......这种情况和线程间通信的情况很相似. 一.问题的提出-单生产者单消费者模式. 需求:定义一个容器,存储了字段姓名和性别,一个线程0为姓名和性别赋值,赋值完毕之后另一个线程1取

java线程间通信

等待通知机制的实现 方法wait()的作用是使当前执行代码的线程进行等待,wait()方法是object类的方法,该方法的作用是将当前线程置入"预执行队列中",并且在wait()所在的代码行处停止执行,直到接到通知,或者被中断为止. 在调用wait()方法执行,线程需要先获得该对象的对象级别锁,也就是说,只能在同步方法,或者同步块中调用wait()方法,在执行wait()方法后,当前线程释放锁,在从wait()方法返回前,线程与其他线程竞争重新获得锁,如果调用wait()是没有持有适当