- 浏览: 251227 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (298)
- 工作感悟 (6)
- java基础 (23)
- 计算机硬件知识 (1)
- 计算机网络知识 (2)
- Struts (3)
- Srping (4)
- hibernate (0)
- ibatis (0)
- webservice (4)
- Thread (22)
- maven (5)
- ubuntu/linux/centos/redhat (46)
- SSO (1)
- ESB (0)
- 工作流 (0)
- oracle (15)
- 云计算 (1)
- hadoop (1)
- nosql (0)
- mysql (3)
- sqlserver (0)
- jquery (0)
- 分布式 (3)
- 集群 (0)
- 设计模式 (2)
- EJB (0)
- map (0)
- cache (5)
- Niginx+varnish+squid+Ats (14)
- Apache (0)
- 工作/职业规划 (0)
- Scala & Groovy (1)
- English (4)
- 数据结构/算法 (6)
- 开发工具 (5)
- 测试 (2)
- Exception (0)
- 定时器 (3)
- j2ee (2)
- 部署 (1)
- Openssl (1)
- 操作系统 (3)
- kvm (13)
- libvirt (5)
- PostgreSql (5)
- 虚拟化 (3)
- 概念理解 (1)
- virt-manager (1)
- RESTful (3)
- 其它 (4)
- ssh2 (14)
- windows (1)
- 房产 (2)
- svn (1)
- 手机 (1)
- ant (1)
- flume (2)
- sqoop (1)
- fastdfs (5)
- log4j (1)
- SPDY (1)
- mongodb (2)
- MQ (2)
- Mina (1)
- dubbo (4)
- PMP (1)
- Webshpere (2)
- jvm (1)
- Btrace (1)
- zookeeper (7)
- UML (1)
- spring cloud (6)
- spring boot (5)
- storm (0)
- 软件管理 (1)
- elasticsearch (1)
- 协议 (2)
- docker (1)
- 性能 (2)
- 安全 (1)
- 代码规范 (1)
- mqtt (1)
- lombok (1)
- 车联网 (1)
- kafka (1)
最新评论
如果两个线程在运行过程中需要交换彼此的信息,比如一个数据或者使用的空间,就需要用到Exchanger这个类,Exchanger为线程交换信息提供了非常方便的途径,它可以作为两个线程交换对象的同步点,只有当每个线程都在进入 exchange ()方法并给出对象时,才能接受其他线程返回时给出的对象。
Exchanger的构造方法如下:
[java]
Exchanger(); //创建一个新的 Exchanger。
Exchanger用到的主要方法有:
[java]
exchange(V x); //等待另一个线程到达此交换点(除非它被中断),然后将给定的对象传送给该线程,并接收该线程的对象。
exchange(V x, long timeout, TimeUnit unit); // 等待另一个线程到达此交换点(除非它被中断,或者超出了指定的等待时间),然后将给定的对象传送给该线程,同时接收该线程的对象。
运行结果:
thread1;交换前数据:AA 交换后的数据=====BB
thread2;交换前数据:BB 交换后的数据=====AA
ps:只适用与两个线程之间的数据交换,如果>2个线程,则必须是偶数个线程,可自行配对交换数据(不能保证配对线程的准确性);如果是奇数,则剩下最后一个线程没有交换线程,一直停止不前。
Exchanger的构造方法如下:
[java]
Exchanger(); //创建一个新的 Exchanger。
Exchanger用到的主要方法有:
[java]
exchange(V x); //等待另一个线程到达此交换点(除非它被中断),然后将给定的对象传送给该线程,并接收该线程的对象。
exchange(V x, long timeout, TimeUnit unit); // 等待另一个线程到达此交换点(除非它被中断,或者超出了指定的等待时间),然后将给定的对象传送给该线程,同时接收该线程的对象。
public static void main(String args[]) throws InterruptedException { Thread thread1 = new Thread("thread1") { @Override public void run() { try { String tStr = "AA"; String reslut = exgr.exchange(tStr); out.println(Thread.currentThread().getName() + ";交换前数据:" + tStr + " 交换后的数据=====" + reslut); } catch (InterruptedException e) { e.printStackTrace(); } } }; Thread thread2 = new Thread("thread2") { @Override public void run() { try { String tStr = "BB"; String result = exgr.exchange(tStr); out.println(Thread.currentThread().getName() + ";交换前数据:" + tStr + " 交换后的数据=====" + result); } catch (InterruptedException e) { e.printStackTrace(); } } }; thread1.start(); thread2.start(); }
运行结果:
thread1;交换前数据:AA 交换后的数据=====BB
thread2;交换前数据:BB 交换后的数据=====AA
ps:只适用与两个线程之间的数据交换,如果>2个线程,则必须是偶数个线程,可自行配对交换数据(不能保证配对线程的准确性);如果是奇数,则剩下最后一个线程没有交换线程,一直停止不前。
发表评论
-
Java通过Executors提供四种线程池
2017-09-27 10:21 434Java通过Executors提供四种线程池,分别为: new ... -
并发线程组件 Amino
2013-07-23 13:29 658Amino CBB (Concurrent Building ... -
Java多线程之Semaphore
2013-07-17 16:12 560import java.util.ArrayL ... -
ThreadLocal的介绍(利用变量副本实现多线程访问同一变量)
2013-07-17 14:20 763早在Java 1.2推出之时,Ja ... -
ThreadGroup其实比ExecutorService更好
2013-07-17 13:32 669用java做抓取的时候免不了要用到多线程的了,因为要同时抓取多 ... -
Java多线程同步器
2013-07-12 17:00 834CyclcBarrier 在实际应用中,有时候需要多个线程 ... -
Java Thread.interrupt 害人! 中断JAVA线程
2013-07-12 16:37 746程序是很简易的。然而,在编程人员面前,多线程呈现出了一组新的难 ... -
Java多线程学习——Condition的使用
2013-07-12 14:36 786Condition 将 Object 监视器方法(wait、n ... -
java多线程设计wait
2013-07-12 14:30 657在Java中,这个机制的实 ... -
Monitor
2013-07-12 10:44 14971. 什么是Monitor? Monitor其实是一 ... -
处理 子线程的返回值
2013-07-08 14:19 814package com.jimmy.Thread.Conc ... -
ExecutorService的execute和submit方法
2013-07-05 17:21 937因为之前一直是用的exec ... -
lockInterruptibly 和lock的区别
2013-06-26 16:36 836lockInterruptibly 与 lock比较区别在于 ... -
慎重使用volatile关键字
2013-06-26 11:10 705volatile关键字相信了解Java多线程的读者都很清楚它的 ... -
对synchronized(this)的一些理解
2013-06-26 10:18 646一、当两个并发线程访问同一个对象object中的这个synch ... -
java中的lock和synchronized区别
2013-06-26 10:02 5581、ReentrantLock 拥有Synchronized相 ... -
线程sleep,join,yield的区别
2013-06-21 17:37 4751.sleep() 使当前线程(即调用该方法的线程)暂停执行 ... -
初学Java多线程:慎重使用volatile关键字
2013-02-25 15:18 660学习Java多线程中会遇到使用volatile关键字的情况。v ... -
java之yield(),sleep(),wait()区别详解-备忘笔记
2013-02-25 14:32 6031、sleep() 使当前线程(即调用该方法的线程)暂停执行 ... -
Java Thread join() 的用法
2013-02-25 13:24 559Java Thread中, join() 方法主要是让调用改方 ...
相关推荐
PDF文件的书签批量自动导入和导出 PDFBookmark-Exchanger-附件资源
用于自动交换项目视图和心的工具。 这个程序是免费的,不要从任何人购买它。它没有显示广告,也没有销售您的数据。它完全依赖于捐款作为资金来源。要了解很重要: 1.当打开时,此扩展将接管浏览器的第一个选项卡。 2...
语言:English 服务Kcilk的交换模块 服务Kcilk的交换模块
语言:English 服务Kcilc的交换模块 服务Kcil的交换模块
使用其他防火墙平台语法管理Linux-netfilter-box的客户端-服务器机制。 当前为Cisco PIX实施的解释器。
网上交流员 现代货币转换器使浏览国外在线商店,目录变得更加容易。 您可以从世界各地的195多种货币中进行选择。 ... 货币更新在转换时刻是实时的和实际的。 支持语言:Bahasa Indonesia,Deutsch,English,Français,...
Exchanger是java 5引入的并发类,Exchanger顾名思义就是用来做交换的。这里主要是两个线程之间交换持有的对象。当Exchanger在一个线程中调用exchange方法之后,会等待另外的线程调用同样的exchange方法。 两个线程都...
颤振开发初学者指南 欢迎使用Google开发者学生俱乐部(DSC)计划主办的Flutter开发入门指南! 从2020年10月1日到2020年11月19日,这是每个星期四(美国东部时间)7:00-8:30进行的为期八周的研讨会。...
ht-07-macro-heat-exchanger.pdf
ht-06-compact-heat-exchanger.pdf
JAVA并发编程-2-线程并发工具类一、Fork/Join1、分而治之与工作密取2、使用标准范式3、Fork/Join的同步用法4、Fork/Join的异步用法二、CountDownLatch三、CyclicBarrier四、Semaphore信号量五、Exchanger ...
Temperature Control in a Heat Exchanger Experiment using Matlab and Simulink derive a first-order-plus-dead time model of the heat exchanger characteristics, step disturbance in valve voltage V , ...
java.util.concurrent包中的Exchanger类可用于两个线程之间交换信息。可简单地将Exchanger对象理解为一个包含两个格子的容器,通过exchanger方法可以向两个格子中填充信息。当两个格子中的均被填充时,该对象会自动...