`

Exchanger-两个线程进行数据交换

 
阅读更多

 

 1  两个线程进行数据交换  

 

package thread.test1;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Exchanger;

/**
 * 作用:Exchanger :两个线程进行数据交换 
 * 
 */
public class ExchangerTest {

	public static void main(String[] args) {
		
		ExchangerTest exchangerTest = new ExchangerTest();
		Exchanger<List<Integer>> exchanger  = new Exchanger<List<Integer>>(); 
		
		new Thread(exchangerTest.new Work(1,  exchanger)).start();  
		new Thread(exchangerTest.new Work(2,  exchanger)).start();
	}
 
	
	class Work implements Runnable{
		
		private Exchanger<List<Integer>> exchanger ; 
		private List<Integer> data =new ArrayList<Integer>();  
		private Integer num ; //线程
		
		public Work(Integer num ,Exchanger<List<Integer>> exchanger ){
			this.num = num ; 
			this.exchanger = exchanger;
		}
		
		@Override
		public void run() {
			Random random = new Random();
			
			data.add(random.nextInt(20) ) ;
			data.add(random.nextInt(20) ) ;
			data.add(random.nextInt(20) ) ;
			System.out.println("线程:"+num+ " 数据:"+ data);
		 
			try {
				exchanger.exchange( data) ;
				System.out.println( "线程:"+num+ "数据更改结束。"+data);
				
			} catch (InterruptedException e) {
				e.printStackTrace();
			} 
		}
	}
}

 

 

 结果:

   

线程:1 数据:[6, 19, 19]
线程:2 数据:[1, 1, 0]
线程:1数据更改结束。[6, 19, 19]
线程:2数据更改结束。[1, 1, 0]

 

 

分享到:
评论

相关推荐

    JAVA线程高级-线程按序交替执行

    - `Exchanger`则允许两个线程交换数据,每次只有一个线程可以完成交换,从而实现交替执行。 4. **线程间的通信**: - `wait()`, `notify()`, `notifyAll()`是Object类的方法,用于线程间的通信。一个线程调用`...

    笔记-2、线程的并发工具类2

    Exchanger是一个数据交换工具,允许两个线程之间进行数据交换。当两个线程都到达Exchanger的交换点时,它们可以交换数据,然后继续执行。 7. **Callable、Future和FutureTask** - `Callable`接口类似Runnable,但...

    Java多线程编程之使用Exchanger数据交换实例

    Exchanger的核心功能是让两个线程在一个同步点相遇,进行数据交换。当一个线程调用`exchange`方法并传递自己的数据时,它会等待另一个线程也调用`exchange`并携带数据。一旦两者都到达同步点,它们就会交换各自的...

    29 一手交钱,一手交货—Exchanger详解.pdf

    在Java并发编程中,Exchanger是一个非常有用的工具类,它允许两个线程间进行数据交换。这个类在处理需要同步的交互式任务时特别有用,比如在多阶段处理或者需要线程间协作的情况。Exchanger的工作原理就像一个中介,...

    Java:Exchanger类的作用.docx

    因此,`Exchanger`在特定的并发场景下非常有用,例如在两个处理阶段之间需要交换数据的情况,或者需要在两个线程之间同步某些计算结果时。但必须谨慎使用,以防止出现死锁或不期望的行为,特别是当有多个线程可能...

    Java编程线程同步工具Exchanger的使用实例解析

    Exchanger类可以作为两个线程交换对象的同步点,只有当每个线程都在进入exchange()方法并给出对象时,才能接受其他线程返回时给出的对象。 Exchanger的使用实例解析可以分为以下几个方面: 1. Exchanger的基本使用...

    java并发工具类(CountDownLatch+Semaphore+Exchanger)

    当一个线程调用`exchange()`方法时,它会阻塞,直到另一个线程也调用了`exchange()`,然后两个线程可以交换数据。 - `exchange(V x)`:将当前线程持有的值x与另一个线程持有的值进行交换。如果另一线程已经准备好...

    多线程通信ThreadDemo

    6. ** Phaser 和 Exchanger**:Java并发包中的高级同步工具,Phaser可以实现线程间的分阶段协调,Exchanger则用于两个线程之间交换数据。 7. **BlockingQueue**:队列实现的一种,提供了线程安全的数据结构,可以...

    java多线程

    - **死锁定义**:两个或多个线程互相等待对方释放资源,导致无法继续执行的状态。 - **死锁的四个必要条件**:互斥条件、请求与保持条件、不剥夺条件和循环等待。 - **避免死锁的方法**:资源预分配、死锁预防、...

    java并发Exchanger的使用

    这里主要是两个线程之间交换持有的对象。当Exchanger在一个线程中调用exchange方法之后,会等待另外的线程调用同样的exchange方法。 两个线程都调用exchange方法之后,传入的参数就会交换。 类定义 public class ...

    Android多线程全新讲解.pdf

    Exchanger用于两个线程之间交换对象;ArrayBlockingQueue是一个有界阻塞队列;而Lock、Condition和Semaphore提供了更细粒度的控制和更灵活的线程同步机制。 3. Java并发编程API使用:在提供的内容中,还有定时器...

    线程实验java

    - **Exchanger**:用于两个线程间的数据交换,当双方都准备好数据后才进行交换。 - **BlockingQueue**:阻塞队列,线程在队列为空时会阻塞,直到有元素可用;队列满时,生产者线程也会被阻塞。 - **CyclicBarrier...

    Java Exchanger并发类使用方法

    Java Exchanger是Java 5引入的并发类,用来实现两个线程之间的对象交换。Exchanger顾名思义,就是用来做交换的。这里主要是两个线程之间交换持有的对象。当Exchanger在一个线程中调用exchange方法之后,会等待另外的...

    经典Java多线程与并发库高级应用

    Exchanger是两个线程交换对象的同步点。阻塞队列结合了线程安全的队列和阻塞机制,使得生产者和消费者能够更协调地工作。而同步集合类提供了线程安全的集合实现。 在多线程技术的实际应用中,例如Android应用开发和...

    JAVA集合、多线程

    本文将深入探讨这两个主题,并结合实例进行详细讲解。 首先,我们来看Java集合。集合是Java提供的一种数据结构,用于存储多个对象。Java集合框架包括接口(如List、Set、Queue)和实现这些接口的类(如ArrayList、...

    多线程笔记_java/多线程_

    Java提供了一些高级同步工具,如Semaphore(信号量)、CyclicBarrier(循环屏障)、CountDownLatch(倒计时锁)和Exchanger(交换器),它们提供了更灵活的线程同步方式。 四、线程池 Java的ExecutorService和...

    java线程与并发编程实践

    Java提供了一系列并发工具类,如Semaphore(信号量)、CyclicBarrier(循环屏障)、CountDownLatch(计数器门锁)和Exchanger(交换器),它们用于控制线程间访问资源的顺序和数量,协调多个线程间的操作。...

    通俗易懂学习java并发工具类-Semaphore,Exchanger

    【Exchanger详解】Exchanger是另一个并发工具类,它用于两个线程之间交换数据。Exchanger提供一个同步点,当两个线程都到达同步点时,它们可以交换它们的数据。这种机制适用于一对一线程间的协作,例如在多阶段计算...

    生产者消费者线程演示

    顾名思义Exchanger让两个线程可以互换信息。用一个例子来解释比较容易。例子中服务生线程往空的杯子里倒水,顾客线程从装满水的杯子里喝水,然后通过Exchanger双方互换杯子,服务生接着往空杯子里倒水,顾客接着喝水...

Global site tag (gtag.js) - Google Analytics