线程的工具类(Exchange)

public class Exchanger<V>extends Object

可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchanger 可能在应用程序(比如遗传算法和管道设计)中很有用。 

实例:

import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
* 线程间的交换数据
*
* @author wangyi
* @version 1.0 <br />
* <a href="www.baidu.com">百度一下</a>
*/
public class ExchagerTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
Exchanger<String> exchange = new Exchanger<String>();
service.execute(new MyThread<String>("爱情", exchange, "爱情"));
service.execute(new MyThread<String>("关晓彤", exchange, "关晓彤"));
service.shutdown();

}

static class MyThread<T> extends Thread {
private T data;
private Exchanger<T> exchange;

public MyThread(T data, Exchanger<T> exchange, String name) {
this.data = data;
this.exchange = exchange;
setName(name);
}

@Override
public void run() {
System.out.println(getName() + "正准备把" + data + "交换出去");
try {
Thread.sleep((int) (Math.random() * 10000));
T datas = exchange.exchange(data);
System.out.println(getName() + "换回的为:" + datas);
} catch (Exception e) {
e.printStackTrace();
}

}
}

}

时间: 2024-10-19 04:59:53

线程的工具类(Exchange)的相关文章

Java线程池工具类

使用线程池的好处: 重用线程,线程的创建和销毁是很耗时的. 控制线程的数量. 线程池工具类: ThreadPool.java package com.zws.thread.pool; import java.util.concurrent.Callable; import java.util.concurrent.Future; /**  *   * @author wensh.zhu  *  */ public interface ThreadPool { void execute(Runna

Java多线程——线程阻塞工具类LockSupport

简述 LockSupport 是一个非常方便实用的线程阻塞工具,它可以在线程内任意位置让线程阻塞. 和 Thread.suspend()相比,它弥补了由于 resume()在前发生,导致线程无法继续执行的情况. 和 Object.wait()相比,它不需要先获得某个对象的锁,也不会抛出 InterruptedException 异常. LockSupport 的静态方法 park()可以阻塞当前线程,类似的还有 parkNanos().parkUntil()等方法.它们实现了一个限时等待,如下图

JAVA 并发编程-线程同步工具类(十二)

本文主要介绍一些java线程同步工具类,并不进行具体讲解,当有需要时,可以再去结合实例学习. 信号灯(Semaphore) 应用场景举例: 例如公司的打卡系统,如果有一个打卡机,那么一次就只能有一个人打卡,其余的人就被阻塞住,打卡完以后就可由下一个人打卡.如果有3个打卡机,那么一次就允许3个人或者少于三个人打卡,其余的人就得等待打卡机空闲下来才能继续打卡. 结果: 已进入1个线程,还可进入2个 已进入2个线程,还可进入1个 已进入3个线程,还可进入0个 空余出1个 已进入4个线程,还可进入0个

挂起(suspend)与线程阻塞工具类LockSupport

挂起(suspend)与线程阻塞工具类LockSupport 一般来说是不推荐使用suspend去挂起线程的,因为suspend在导致线程暂停的同时,并不会去释放任何锁资源. 如果其他任何线程想要访问被它暂用的锁时,都会被牵连,导致无法正常继续运行. 直到对应的线程上进行了resume操作. 并且,如果resume操作意外的在suspend前执行了,那么被挂起的线程可能很难有机会被继续执行,更严重的是:它所占用的锁不会被释放,因此可能会导致整个系统工作不正常,而且,对于被挂起的线程,从它的线程状

线程阻塞工具类:LockSupport(读书笔记)

他可以在线程任意位置让线程阻塞, LockSupport的静态方法park()可以阻塞当前线程,类似的还有parkNanos() ParkUntil()等,他们实现了一个限时等待 public class LockSupportDemo { public static Object u = new Object(); static ChangeObjectThread t1 = new ChangeObjectThread("t1"); static ChangeObjectThrea

JDK5新特性之线程同步工具类(三)

一. Semaphore实现信号灯 Semaphore可以控制同时访问资源的线程个数, 例如: 实现一个文件允许的并发访问数. Semaphore实现的功能就类似厕所有5个坑, 加入有十个人要上厕所, 那么同时只能有5个人能够占用, 当5个人中的任何一个人离开后, 其中在等待的另外5个人中就有一个可以占用了. 另外等待的5个人中可以是随机获得优先机会, 也可以使按照先来后到的顺序获得机会, 这取决于构造Semaphore对象时传入的参数选项. /** * Semaphore:信号灯 */ pub

并发编程—2并发工具类

目录 2.线程的工具类 2.1 fork/join框架 2.2 CountDownLatch 一般用法 2.3 CycliBarrier 2.4 Semaphore 2.5 Exchange 使用举例 2.6 Callable Future and FutureTask 2.线程的工具类 2.1 fork/join框架 ### 什么是分而治之 简单地说把一个大的问题,拆分成若干个子问题,每个问题相互独立,且和原来问题形式相同.最后将每个子问题的解合并得到原问题的解答. ### 什么是工作密取 #

实用工具类--第三方开源--Lazy

下载地址 :https://github.com/ddwhan0123/Lazy 工具 描述 AnimationUtils 动画工具类 AppUtils APP相关信息工具类 AssetDatabaseOpenHelper 目录资源获取 Base64 加密 BitmapUtil 获取Bitmap和对Bitmap的操作 ChannelUtil 获取市场号 Colors 颜色工具类 包括常用的色值 DES DES加密解密类 DataCleanManager 本应用数据清除管理器 DatabaseEx

Java并发工具类(四):线程间交换数据的Exchanger

简介 Exchanger(交换者)是一个用于线程间协作的工具类.Exchanger用于进行线程间的数据交换.它提供一个同步点,在这个同步点两个线程可以交换彼此的数据.这两个线程通过exchange方法交换数据, 如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方. Exchanger的应用场景 1.Exchanger可以用于遗传算法,遗传算法里需要选出两个人作为交配对象,这时