`

并发编程回顾:线程数据交换器Exchanger

 
阅读更多

原先多线程并发编程的学习笔记和代码整理一下贴上来。

---------------------------------

线程数据交换器Exchanger

根据JDK文档描述:

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

举一个非常简单的例子:

定义2个线程,以及一个exchanger交换器,该交换器交换String类型的数据。

final Exchanger<String> changer = new Exchanger<String>();
new Thread(new Runnable() {
			public void run() {
				try {
					Thread.sleep(new Random().nextInt(5000));
					String data1 = "data1";
					String data2 = changer.exchange(data1);
					System.out.println("thread1 get return data is " + data2);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
}).start();
		
new Thread(new Runnable() {
			public void run() {
				try {
					Thread.sleep(new Random().nextInt(5000));
					String data1 = "data2";
					String data2 = changer.exchange(data1);
					System.out.println("thread2 get return data is " + data2);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
}).start();

如上,两个线程启动后会睡眠一段时间,然后到达交换点。

关于exchange()方法:

等待另一个线程到达此交换点(除非当前线程被中断),然后将给定的对象传送给该线程,并接收该线程的对象。

也就是说如果另一个线程没有到达交换点,则会阻塞。

运行程序,结果为2个string数据交换:

thread1 get return data is data2
thread2 get return data is data1

全文完。

分享到:
评论

相关推荐

    java并发编程:设计原则与模式.rar

    Java并发工具类库(java.util.concurrent)是并发编程中的另一个重要主题,包括Atomic类(提供原子操作)、Semaphore(信号量)、CountDownLatch(计数器门锁)、CyclicBarrier(循环栅栏)和Exchanger(交换器)等...

    java线程与并发编程实践

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

    Java 并发编程实战 中英文+代码示例

    3. **并发工具类**:如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)和Exchanger(交换器)等,这些都是Java并发库提供的重要工具,用于实现复杂的同步和协作机制。 4. **并发集合**...

    《Java并发编程实战》PDF版本下载.txt

    - **Exchanger**:允许两个线程交换对象的工具类。 ### Java并发编程实战案例 #### 1. 生产者消费者模式 生产者消费者模式是一种经典的多线程设计模式,用于解决多线程之间如何共享数据的问题。在Java中可以通过`...

    Java并发编程实战

    - `Exchanger`:允许两个线程交换对象。 - `Phaser`:类似于`CyclicBarrier`,但更加灵活,可以动态注册/注销参与者。 ### 实战案例 在实际开发中,Java并发编程的应用非常广泛,比如: - 在Web服务器中处理并发...

    Java并发编程实践

    本章详细介绍了Java提供的各种同步工具,包括Semaphore(信号量)、CyclicBarrier(循环屏障)、CountDownLatch(计数器门锁)和Exchanger(交换器),以及如何使用它们来控制并发流程。 第四章:线程安全的数据...

    Java并发编程全景图.pdf

    Exchanger用于两个线程之间交换数据。 12. 硬件和操作系统支持 Java并发编程的成功在很大程度上依赖于底层硬件和操作系统的支持。在多处理器环境中,非统一内存访问(NUMA)架构、硬件共享内存、内存栅栏和CPU缓存...

    java并发编程技术

    JUC是Java提供的高级并发工具包,包含如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)、Exchanger(交换器)等工具类,它们简化了多线程编程并提供了更多高级功能。 5. **非阻塞I/O...

    并发编程——并发工具类.pdf

    并发工具类则是Java中用于支持多线程协作和同步控制的一系列工具,它们可以简化并发控制逻辑,提高开发效率,并且减少因并发编程带来的错误。 #### 标题与描述解析 标题“并发编程——并发工具类.pdf”预示了文档...

    JAVA并发编程实践(中文)含源码

    最后,Java并发工具类,如Semaphore(信号量)、CyclicBarrier(回环栅栏)、CountDownLatch(计数器门闩)和Exchanger(交换器),提供了更高级的同步和协调机制,有助于解决复杂并发场景的问题。 通过阅读《JAVA...

    Java并发编程(学习笔记).xmind

    Java并发编程 背景介绍 并发历史 必要性 进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 ...

    Java并发编程实践-电子书-03章

    - **3.4.4 Exchanger**:交换器(Exchanger)允许两个线程互相交换对象。 - **3.4.5 Future和FutureTask**:`Future`接口表示异步计算的结果,`FutureTask`是`Future`的一个具体实现,它代表一个可以取消的异步计算。 ...

    并发编程二进阶部分.rar

    Java并发包提供了一些强大的工具类,例如`Semaphore`(信号量)、`CountDownLatch`(倒计时器)、`CyclicBarrier`(循环栅栏)和`Exchanger`(交换器)。这些工具可以帮助我们构建更复杂的并发控制策略。比如,`...

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

    - JUC包含了许多高级并发组件,如`Semaphore`信号量、`CyclicBarrier`回环栅栏、`CountDownLatch`倒计时器和`Exchanger`交换器等,它们可以帮助控制线程的执行顺序。 - `Semaphore`可以限制同时访问特定资源的线程...

    某电信项目多线程同步数据实例

    5. **并发工具类**:Java并发包(java.util.concurrent)中包含许多工具类,如Semaphore(信号量)、CountDownLatch(倒计时锁)、CyclicBarrier(回环栅栏)和Exchanger(交换器),它们是设计复杂多线程同步场景的...

    java多线程设计模式(pdf)

    4. **并发工具类**:Java并发包(java.util.concurrent)提供了丰富的工具类,如Semaphore(信号量)、CountDownLatch(倒计时器)、CyclicBarrier(回环屏障)和Exchanger(交换器)等。这些工具可以用来协调线程间的行为,...

    Java并发编程实践-03章-使用JDK并发包构建程序1

    常用于限制系统中并发线程的数目。 **3.4.2 Barrier** CyclicBarrier允许一组线程等待彼此到达屏障点,然后一起继续执行。在所有线程到达屏障点前,任何线程都无法越过。 **3.4.3 CountDownLatch** CountDownLatch...

Global site tag (gtag.js) - Google Analytics