• Exchanger的介绍

      类Exchanger的功能可以使两个线程之间传输数据。

  • 方法exchange()的使用

     

package com.wjg.unit;

import java.util.concurrent.Exchanger;

public class Run {
public static void main(String[] args) {
Exchanger<String> exchanger = new Exchanger<String>();
Run run =new Run();
ThreadA a = run.new ThreadA(exchanger);
ThreadB b = run.new ThreadB(exchanger);
a.start();
b.start();
} public class ThreadA extends Thread{ private Exchanger<String> exchanger; public ThreadA(Exchanger<String> exchanger) {
super();
this.exchanger = exchanger;
} @Override
public void run() {
try {
String receive = exchanger.exchange("123");
System.out.println("在线程A中获得线程B的值:"+receive);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} public class ThreadB extends Thread{ private Exchanger<String> exchanger; public ThreadB(Exchanger<String> exchanger) {
super();
this.exchanger = exchanger;
} @Override
public void run() {
try {
String receive = exchanger.exchange("456");
System.out.println("在线程B中获得线程A的值:"+receive);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
} 运行结果:
在线程A中获得线程B的值:456
在线程B中获得线程A的值:123

方法exchange(V x,long timeout,TimeUnit unit)的使用

此方法是指在指定的时间内没有其他线程获取数据,则出现超时异常。

package com.wjg.unit1;

import java.util.concurrent.Exchanger;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException; public class Run2 {
public static void main(String[] args) {
Exchanger<String> exchanger = new Exchanger<String>();
Run2 run =new Run2();
ThreadA a = run.new ThreadA(exchanger);
a.start();
} public class ThreadA extends Thread{
  
private Exchanger<String> exchanger; public ThreadA(Exchanger<String> exchanger) {
super();
this.exchanger = exchanger;
} @Override
public void run() {
try {
//设置超时时间
String receive = exchanger.exchange("123",5,TimeUnit.SECONDS);
System.out.println("在线程A中获得线程B的值:"+receive);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}
} 执行结果:
java.util.concurrent.TimeoutException
    at java.util.concurrent.Exchanger.exchange(Exchanger.java:683)
    at com.wjg.unit1.Run2$ThreadA.run(Run2.java:27)

多线程编程(二)-Exchanger的使用的更多相关文章

  1. Linux系统编程@多线程编程(二)

    线程的操作 线程标识 线程的ID表示数据类型:pthread_t (内核中的实现是unsigned long/unsigned int/指向pthread结构的指针(不可移植)几种类型) 1.对两个线 ...

  2. java多线程编程(二)

    1. wait 和 sleep 区别? 1.wait可以指定时间也可以不指定,sleep必须指定时间. 2.在同步中时,对cpu的执行权和锁的处理不同.  wait:释放执行权,释放锁.  sleep ...

  3. java多线程编程(二创建线程)

    1.概念           因为java是完全面向对象的,所以在java中,我们说的线程,就是Thread类的一个实例对象.所以,一个线程就是一个对象,它有自己字段和方法. 2.创建线程 创建线程有 ...

  4. Android多线程编程<二>Handler异步消息处理机制之Message

      Message(消息):       一. Message的字段:    在Android中,Message作为线程之间(主要是子线程和UI主线程之间)数据交换的载体,通过Handler去传递.它 ...

  5. C++多线程编程二

    1. 死锁与解锁: #include <iostream> #include <thread> #include <mutex> using namespace s ...

  6. C语言多线程编程二

    一. 线程通信----事件: 1.一对一模式: #include <stdio.h> #include <stdlib.h> #include <Windows.h> ...

  7. java多线程编程——同步器Exchanger

    类java.util.concurrent.Exchanger提供了一个同步点,在这个同步点,一对线程可以交换数据.每个线程通过exchange()方法的入口提供数据给他的伙伴线程,并接收他的伙伴线程 ...

  8. Windows下多线程编程(二)

    线程的分类 1.     有消息循环线程 MFC中有用户界面线程,从CWinThread派生出一个新的类作为UI线程类CUIThread,然后调用AfxBeginthread(RUNTIME_CLAS ...

  9. UNIX环境编程学习笔记(27)——多线程编程(二):控制线程属性

    lienhua342014-11-09 1 线程属性概括 POSIX 线程的主要属性包括 scope 属性.detach 属性.堆栈地址.堆栈大小.优先级.在头文件 pthread.h 中定义了结构体 ...

随机推荐

  1. archlinux 64bit 开发android

    arch 64位下直接运行android emulator会出现错误:“Failed to start emulator: Cannot run program "xxxx/sdk/tool ...

  2. TFS 2015新功能之一,当前迭代查询标记

    TFS 2015发布在即,有幸作为MVP提前获得了TFS的RTM版本,下面就TFS 2015的新功能做一些介绍:   TFS 2015新功能之一,当前迭代查询标记 在TFS的查询中,可以将" ...

  3. Linux中连接mysql执行sql文件

    数据量小的时候可以把sql语句内容粘贴执行,但是文件很大的时候,这样执行效率很慢很慢,需要使用source执行sql文件 1.客户端连接mysql数据库 [root@iZbp1bb2egi7w0uey ...

  4. 自定义 Asp.Net SessionID 获取方式

    新建类 CustomSessionIDManager public class CustomSessionIDManager : SessionIDManager, ISessionIDManager ...

  5. SSH小项目整合的简单记录

    第一步.导入sprint4.struts2和hibernate4的jar包 struts2的jar包 commons-fileupload-1.3.3.jar commons-io-2.5.jar c ...

  6. 一起学习《C#高级编程》1--类型的安全性

    感觉写随笔第一天就遇到了困难,感觉好费时间啊,回宿舍就得8点多,然后只能看一点书.之后写随笔,首先得回忆,然后组织,最后打字.还有就是宿舍迎来的断网的日子,特别不方便,只能第二天去公司发.本人目前是. ...

  7. 关于EF的一点小记录

    今日新闻:朝鲜要改革开放了!!!比你牛逼的人都在努力,你还有理由懒惰吗? 宇宙强大IDE配套的EF问题记录 今天做数据添加时,Id我设置为int类型了,结果在做Add操作时报的错让我摸不着头脑,后来问 ...

  8. ANE-调用原生地图注意点

    打包的bat bin/adt -package -target ane test.ane extension.xml -swc AneTest.swc -platform iPhone-ARM -C ...

  9. kubectl get componentstatus ERROR:HTTP probe failed with statuscode: 503

    通过kubectl命令可以查看k8s各组件的状态: [root@wecloud-test-k8s-1 ~]# kubectl get cs NAME STATUS MESSAGE ERROR cont ...

  10. 报错:'utf-8' codec can't decode byte 0xb0 in position 0: invalid start byte

    pandas的read_csv读取一个csv表格,报错. 解决方法:用editplus打开表格,改变编码格式为utf-8,保存,重新读取,通过.