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 { ...
随机推荐
- java8-lambda常用语法示例
常用语法示例: public static void main(String[] args) { List<OrderInfo> orderInfoList = Lists.newArra ...
- Spring事务管理transactionManager
bean.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http ...
- 查看window系统电脑连接过的wifi密码
电脑连接过的wifi都会有痕迹,包括SSID号和密码等信息,借此可以回查wifi密码信息. 步骤: 1.开始----运行----输入cmd 2.在dos窗口输入以下代码: “for /f " ...
- ubuntu两个conda安装和切换
1. 下载anaconda2安装,一路默认,注意添加/home/wang/.bashrc选择yes 2. 在/home/wang/envs/py3安装anaconda3,其他同anaconda2 3. ...
- vue 配合vue-resource调用接口,获取数据
1.先用node+express+mysql简单配置一下后台 const express = require('express');const mysql = require('mysql');con ...
- ccf-集合竞价-201412-3
这道题数据量很小,所以用前缀和直接暴力解决了 首先将浮点数转换为整数; int_p=(int)(dou_p*100+0.5); 必须加一个eps,否则浮点数运算会有误差 然后从高到低枚举 #inclu ...
- 前端---JQuery初识
---恢复内容开始--- BOM JQuery认识 JQuery基本选择器 JQuery高级选择器 1.javascript基础部分包括三个部分: ECMAScript:JavaScript的语法标准 ...
- JavaSE学习(二):进制转换—数据类型转换—Java运算符
一.进制转换 1.1 其他进制转十进制(以十六进制为例): 十六进制范围:0-9, A-F对应数字10-15 2A7E(16) = 14*16(0) +7*16(1) + 10*16(2) + ...
- PTA——出现次数最多的数
PTA 7-58 求整数序列中出现次数最多的数 #include<stdio.h> #define N 1000 int main() { ,flag; ]; scanf("%d ...
- gtest 参数化
前言: 在测试用例中,我们时常需要传给被测函数不同的值,gtest为我们提供了简便的方法,可以使我们能够灵活的进行参数化测试. 步骤: 1.创建一个类,继承testing::TestWithParam ...