Java核心-多线程-并发控制器-Exchanger交换器
1.基本概念
Exchanger,从名字上理解就是交换。Exchanger用于在两个线程之间进行数据交换,注意也只能在两个线程之间进行数据交换。
线程会阻塞在Exchanger的exchange方法上,直到另外一个线程也到了同一个Exchanger的exchange方法时,二者进行数据交换,
然后两个线程继续执行自身相关的代码。
2.抽像模型
线程同步、线程通信
3.使用场景
两个线程之间交换数据(没有更好的例子了)
4.Exchanger使用api
     Exchanger<E> exchanger = new Exchanger<E>();
    exchanger.exchange(num); //当前执行线程等待另一个线程执行此行代码,完成变量num的交换
5.示例
    private static class ExchangeThread extends Thread{
		private Integer num;
		private Exchanger<Integer> exchange;
		private int sleepTime;
		public ExchangeThread(Integer num, Exchanger<Integer> exchange, int sleepTime) {
			super();
			this.num = num;
			this.exchange = exchange;
			this.sleepTime = sleepTime;
		}
		@Override
		public void run() {
			System.out.println(this.getName() + "线程开始工作了,当前号码是" + num + ",当前时间" + System.currentTimeMillis());
			try {
				Thread.sleep(sleepTime);
				num = exchange.exchange(num);
				System.out.println(this.getName() + "线程开始完成了工作,当前号码是" + num + ",当前时间" + System.currentTimeMillis());
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			super.run();
		}
	}
执行结果
Thread-1线程开始工作了,当前号码是2,当前时间1555346410059
Thread-0线程开始工作了,当前号码是1,当前时间1555346410059
Thread-1线程开始完成了工作,当前号码是1,当前时间1555346418065
Thread-0线程开始完成了工作,当前号码是2,当前时间1555346418065
Java核心-多线程-并发控制器-Exchanger交换器的更多相关文章
- Java核心-多线程-并发控制器-Semaphore信号量
		Semaphore是非常有用的一个多线程并发控制组件(Java还有CountDownLatch.CyclicBarrier.Exchanger多线程组件),它相当于是一个并发控制器,是用于管理信号量的 ... 
- Java核心-多线程-并发控制器-CyclicBarrier同步屏障
		1.基本概念 中文译本同步屏障,同样来自jdk并发工具包中一个并发控制器,它的使用和CountDownLatch有点相似,能够完成某些相同并发场景,但是它们却不相同. 2.抽象模型 主要用来实现多个线 ... 
- Java核心-多线程-并发控制器-CountDownLatch倒数闩
		1.基本概念 CountDownLatch,中文名倒数闩,jdk并发工具包中一个并发控制器,它抽象了一个常见的多线程并发场景,开发人员使用它可以写出同时兼顾线程安全性与高效率的代码. 2.抽象模型 相 ... 
- Java接口多线程并发测试 (一)
		本文为作者原创,禁止转载,违者必究法律责任!!! 本文为作者原创,禁止转载,违者必究法律责任!!! Java接口多线程并发测试 一,首先写一个接口post 请求代码: import org.apach ... 
- java核心-多线程-Java多线程编程涉及到包、类
		Java有关多线程编程设计的类主要涉及两个包java.lang和java.util.concurrent两个包 java.lang包,主要是线程基础类 <1>Thread <2> ... 
- java核心-多线程(1)-知识大纲
		Thread,整理一份多线程知识大纲,大写意 1.概念介绍 线程 进程 并发 2.基础知识介绍 Java线程类 Thread 静态方法&实例方法 Runnable Callable Futur ... 
- java核心-多线程(8)- 并发原子类
		使用锁能解决并发时线程安全性,但锁的代价比较大,而且降低性能.有些时候可以使用原子类(juc-atomic包中的原子类).还有一些其他的非加锁式并发处理方式,我写这篇文章来源于Java中有哪些 ... 
- Java中多线程并发体系知识点汇总
		一.多线程 1.操作系统有两个容易混淆的概念,进程和线程. 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进程的地址空间是互相隔离的:进程拥有各种 ... 
- java核心-多线程(6)-线程池-ThreadPoolExecutor
		1.java多线程编程少不了使用线程池,线程池相关的工具类所在jdk包,java.util.concurrent 2.使用示例 demo1 public class ThreadPoolDemo { ... 
随机推荐
- C语言---指针变量详解2
			指针变量保存的是地址,本质上是一个整数,可以进行部分运算,例如加法.减法.比较等,请看下面的代码: #include <stdio.h> int main(){ int a = 10, * ... 
- ChIP-seq基本流程及工具
			ChIP-seq数据分析整理 1.Alignment 2.Peak detection 3.Peak annotation 1. GO analysis 2. Pathway analysis 4.D ... 
- Asp.Net Form表单控件的回车默认事件
			当form表单文本框控件在收到回车事件时,默认会触发表单内第一个可提交按钮的事件,但业务中可能要求有其它控件进行提交,而不是这个默认的 这时需要脚本控件事件冒泡传递取消回事事件. $(document ... 
- 记一次H5页面卡死的BUG
			之前有次开发小程序内嵌页面,类似于网易星球那种,很多钻石可以手动点击收取. 该页面css动效非常多,几乎页面上除了纯色背景之外全部有动效. 也正因为如此,才做成了小程序内嵌的形式(太大了). 当多次快 ... 
- pycharm  的配置
			装好了pycharm之后 一.新建项目:(两个接口) 或 出现下图便创建成功: 二.配置本地项目编译器:(每个项目都要配一次) 出现下图就配置成功了: 三.pycharm + linux 远程开发(此 ... 
- Python 3.6print 出现  SyntaxError: invalid syntax
			开始使用sublime学习python,编写代码如图 Ctrl+B运行以后,报错 SyntaxError: invalid syntax 百度查询以后,大部分的回答都是说,python在3.0以后 ... 
- 20155208徐子涵 《网络对抗技术》Web基础
			20155208徐子涵 <网络对抗技术>Web基础 实验要求 Web前端HTML Web前端javascipt Web后端:MySQL基础:正常安装.启动MySQL,建库.创建用户.修改密 ... 
- html5 知识点简单总结03
			table表格 ----基本结构 table默认无边框(border) <table border="数值"> <tr> <th>表头</ ... 
- 【NOIp2004提高组】食虫算 题解
			所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 + 8468#6633 44445509678 其中#号代表被 ... 
- vim-go 安装
			vim-go 安装 https://studygolang.com/articles/3229 
