原先多线程并发编程的学习笔记和代码整理一下贴上来。
---------------------------------
线程数据交换器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并发工具类库(java.util.concurrent)是并发编程中的另一个重要主题,包括Atomic类(提供原子操作)、Semaphore(信号量)、CountDownLatch(计数器门锁)、CyclicBarrier(循环栅栏)和Exchanger(交换器)等...
Java提供了一系列并发工具类,如Semaphore(信号量)、CyclicBarrier(循环屏障)、CountDownLatch(计数器门锁)和Exchanger(交换器),它们用于控制线程间访问资源的顺序和数量,协调多个线程间的操作。...
3. **并发工具类**:如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)和Exchanger(交换器)等,这些都是Java并发库提供的重要工具,用于实现复杂的同步和协作机制。 4. **并发集合**...
- **Exchanger**:允许两个线程交换对象的工具类。 ### Java并发编程实战案例 #### 1. 生产者消费者模式 生产者消费者模式是一种经典的多线程设计模式,用于解决多线程之间如何共享数据的问题。在Java中可以通过`...
- `Exchanger`:允许两个线程交换对象。 - `Phaser`:类似于`CyclicBarrier`,但更加灵活,可以动态注册/注销参与者。 ### 实战案例 在实际开发中,Java并发编程的应用非常广泛,比如: - 在Web服务器中处理并发...
本章详细介绍了Java提供的各种同步工具,包括Semaphore(信号量)、CyclicBarrier(循环屏障)、CountDownLatch(计数器门锁)和Exchanger(交换器),以及如何使用它们来控制并发流程。 第四章:线程安全的数据...
Exchanger用于两个线程之间交换数据。 12. 硬件和操作系统支持 Java并发编程的成功在很大程度上依赖于底层硬件和操作系统的支持。在多处理器环境中,非统一内存访问(NUMA)架构、硬件共享内存、内存栅栏和CPU缓存...
JUC是Java提供的高级并发工具包,包含如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)、Exchanger(交换器)等工具类,它们简化了多线程编程并提供了更多高级功能。 5. **非阻塞I/O...
并发工具类则是Java中用于支持多线程协作和同步控制的一系列工具,它们可以简化并发控制逻辑,提高开发效率,并且减少因并发编程带来的错误。 #### 标题与描述解析 标题“并发编程——并发工具类.pdf”预示了文档...
最后,Java并发工具类,如Semaphore(信号量)、CyclicBarrier(回环栅栏)、CountDownLatch(计数器门闩)和Exchanger(交换器),提供了更高级的同步和协调机制,有助于解决复杂并发场景的问题。 通过阅读《JAVA...
Java并发编程 背景介绍 并发历史 必要性 进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 ...
Java并发包提供了一些强大的工具类,例如`Semaphore`(信号量)、`CountDownLatch`(倒计时器)、`CyclicBarrier`(循环栅栏)和`Exchanger`(交换器)。这些工具可以帮助我们构建更复杂的并发控制策略。比如,`...
- JUC包含了许多高级并发组件,如`Semaphore`信号量、`CyclicBarrier`回环栅栏、`CountDownLatch`倒计时器和`Exchanger`交换器等,它们可以帮助控制线程的执行顺序。 - `Semaphore`可以限制同时访问特定资源的线程...
5. **并发工具类**:Java并发包(java.util.concurrent)中包含许多工具类,如Semaphore(信号量)、CountDownLatch(倒计时锁)、CyclicBarrier(回环栅栏)和Exchanger(交换器),它们是设计复杂多线程同步场景的...
4. **并发工具类**:Java并发包(java.util.concurrent)提供了丰富的工具类,如Semaphore(信号量)、CountDownLatch(倒计时器)、CyclicBarrier(回环屏障)和Exchanger(交换器)等。这些工具可以用来协调线程间的行为,...
常用于限制系统中并发线程的数目。 **3.4.2 Barrier** CyclicBarrier允许一组线程等待彼此到达屏障点,然后一起继续执行。在所有线程到达屏障点前,任何线程都无法越过。 **3.4.3 CountDownLatch** CountDownLatch...