科技企业网站设计制作,wordpress边栏扩大尺寸,企业vi设计的作用与意义,深圳网站建设公司哪家比较好Exchanger可以在两个线程之间交换数据#xff0c;只能是2个线程#xff0c;他不支持更多的线程之间互换数据。今天我们就通过实例来学习一下Exchanger的用法。 Exchanger的简单实例 Exchanger是在两个任务之间交换对象的栅栏#xff0c;当这些任务进入栅栏时#xff0c;它们…Exchanger可以在两个线程之间交换数据只能是2个线程他不支持更多的线程之间互换数据。今天我们就通过实例来学习一下Exchanger的用法。 Exchanger的简单实例 Exchanger是在两个任务之间交换对象的栅栏当这些任务进入栅栏时它们各自拥有一个对象。当他们离开时它们都拥有之前由对象持有的对象。它典型的应用场景是一个任务在创建对象这些对象的生产代价很高昂而另一个任务在消费这些对象。通过这种方式可以有更多的对象在被创建的同时被消费。 一、Exchanger的简单使用 package com.linux.huhx.concurreny;import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class ExchangerTest {public static void main(String[] args) {ExecutorService executor Executors.newCachedThreadPool();final Exchanger exchanger new Exchanger();executor.execute(new Runnable() {String data1 Ling;Overridepublic void run() {doExchangeWork(data1, exchanger);}});executor.execute(new Runnable() {String data1 huhx;Overridepublic void run() {doExchangeWork(data1, exchanger);}});executor.shutdown();}private static void doExchangeWork(String data1, Exchanger exchanger) {try {System.out.println(Thread.currentThread().getName() 正在把数据 data1 交换出去);Thread.sleep((long) (Math.random() * 1000));String data2 (String) exchanger.exchange(data1);System.out.println(Thread.currentThread().getName() 交换数据 到 data2);} catch (InterruptedException e) {e.printStackTrace();}}
} 运行结果如下不固定 pool-1-thread-1正在把数据 Ling 交换出去
pool-1-thread-2正在把数据 huhx 交换出去
pool-1-thread-2交换数据 到 Ling
pool-1-thread-1交换数据 到 huhx 当线程A调用Exchange对象的exchange()方法后他会陷入阻塞状态直到线程B也调用了exchange()方法然后以线程安全的方式交换数据之后线程A和B继续运行。转载于:https://www.cnblogs.com/pypua/articles/8568425.html