package com.test6;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.Exchanger;
/**
* Exchanger这个类,估计大家是很少用到,笔者最近在项目也用到这个类,在项目使用这个类来用于两个线程进行交换数据缓存,
* 比如一个线程来读数据,另一个线程在写入缓存,在这两个线程中用Exchanger进行交换数据.接下来我写了一段代码来说明这个类的使用场景:
*
*/
public class ExchangerTest {
public static void main(String[] args) {
Exchanger<List<String>> exchanger = new Exchanger<List<String>>();
new ReadThread(exchanger).start();// 启动读数据线程
new WriteThread(exchanger).start();// 启动写数据线程
}
}
class ReadThread extends Thread {
private Exchanger<List<String>> exchanger;
List<String> bufferList ;
public ReadThread(Exchanger<List<String>> exchanger) {
this.exchanger = exchanger;
}
@Override
public void run() {
System.out.println("ReadThread start");
try {
bufferList = exchanger.exchange(bufferList);
for (String str : bufferList) {
System.out.println(str);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("ReadThread end");
}
}
class WriteThread extends Thread {
private Exchanger<List<String>> exchanger;
List<String> bufferList = new LinkedList<String>();
public static final Integer BUFFER_SIZE = 10;
public WriteThread(Exchanger<List<String>> exchanger) {
this.exchanger = exchanger;
}
@Override
public void run() {
try {
System.out.println("WriteThread start");
for (int i = 0; i < BUFFER_SIZE; i++) {
bufferList.add(String.valueOf('A' + i)); // 模拟读数据
}
System.out.println("WriteTread 准备好数据,睡眠5秒钟");
Thread.sleep(5000);
bufferList = exchanger.exchange(bufferList); // 从Exchanger获得缓存数据
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("WriteTread end");
}
}
运行结果:
ReadThread start
WriteThread start
WriteTread 准备好数据,睡眠5秒钟
65
66
67
68
69
70
71
72
73
74
ReadThread end
WriteTread end
分享到:
相关推荐
2. Java多线程高级特性:内容中出现的“ThreadLocal”,“CyclicBarrier”,“CountDownLatch”,“Exchanger”,“ArrayBlockingQueue”,“Lock”,“Condition”和“Semaphore”,这些都是Java 5以后版本引入的...
Java多线程编程中的Exchanger是一个非常有用的工具类,它位于`java.util.concurrent`包下,主要用于线程间的数据交换。Exchanger的核心功能是让两个线程在一个同步点相遇,进行数据交换。当一个线程调用`exchange`...
《狂神多线程+juc》是一份针对Java并发编程深度学习的资源包,主要涵盖了Java多线程基础以及Java并发工具集(JUC)的高级应用。在Java编程中,多线程是提高程序效率、实现并发执行的重要手段,而JUC(Java ...
在Java编程中,多线程通信是一个重要的概念,特别是在并发编程中。`ThreadDemo`示例可能演示了如何在不同的线程之间有效地传递信息。线程通信是解决多个执行流同步和协作的关键,确保数据的一致性和正确性。以下是...
在IT领域,多线程是并发编程中的一个关键概念,特别是在Java这样的多线程支持语言中。马士兵是一位知名的IT教育专家,他的多线程训练营笔记深入浅出地讲解了这一主题,帮助开发者理解并掌握多线程的精髓。 多线程...
3. Exchanger的应用场景:Exchanger可以应用于各种需要线程之间交换数据的场景,例如,在多线程编程中,Exchanger可以用来实现线程之间的数据交换,从而提高程序的效率和可靠性。 Exchanger的优点: 1. 方便易用:...
### 张孝祥Java多线程与并发库高级应用笔记概览 #### 一、Java多线程技术的重要性与挑战 Java线程技术是软件工程领域不可或缺的一部分,尤其在底层编程、Android应用开发以及游戏开发中,其重要性不言而喻。然而,...
在Java编程语言中,多线程是程序设计中的一个重要概念,尤其在开发高效能和响应迅速的应用时。本文档将全面解析多线程的基础知识,从简单到复杂,帮助开发者深入理解并掌握这一核心技术。 一、多线程基础 1.1 线程...
Java作为一门广泛使用的编程语言,其对多线程的支持是其强大功能之一。多线程允许程序在单个进程中并发执行多个任务,从而提高了程序的效率和响应性。本文将深入探讨Java多线程的核心概念,包括线程的定义、线程的...
在深入探讨Java多线程与并发库的高级应用前,有必要了解一些基础概念。Java线程是Java程序的基础,它代表程序中的一条执行线索或线路。在Java中创建线程有两种传统方式,一种是通过继承Thread类并覆盖其run方法来...
5. **并发工具类**:Java并发包(java.util.concurrent)中包含许多工具类,如Semaphore(信号量)、CountDownLatch(倒计时锁)、CyclicBarrier(回环栅栏)和Exchanger(交换器),它们是设计复杂多线程同步场景的...
【2018最新最详细】并发多线程教程,课程结构如下 1.并发编程的优缺点 2.线程的状态转换以及基本操作 3.java内存模型以及happens-before规则 4.彻底理解synchronized 5.彻底理解volatile 6.你以为你真的了解final吗...
《Java多线程设计模式》是一本专注于Java并发编程的权威指南,对于深入理解Java并发机制和提升多线程编程技能具有极高的价值。这本书详细介绍了如何在Java环境中有效地使用多线程,以及如何设计出高效、可维护的并发...
最后,我们还需要了解Java并发工具类,如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)和Exchanger(交换器),它们为多线程编程提供了强大的支持。 总结来说,Java多线程涉及的内容...
4. **并发工具类**:java.util.concurrent包提供了多种并发工具,如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)和Exchanger(交换器),它们为多线程编程提供了更高级别的抽象和控制...
2. 使用并发工具类:如`CountDownLatch`, `CyclicBarrier`, `Semaphore`, `Exchanger`等,提升多线程编程的灵活性和安全性。 3. 线程安全的数据结构:`ConcurrentHashMap`, `CopyOnWriteArrayList`等并发容器可保证...
在Java编程中,多线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而提高了系统的效率和响应性。然而,在某些场景下,我们可能需要控制线程的执行顺序,确保它们按照特定的顺序交替运行,这在并发编程...
在现代计算环境中,多线程编程已经成为开发者必备的技能之一。 一、多线程基础 Java中的多线程可以通过两种主要方式实现:继承Thread类或实现Runnable接口。Thread类代表了一个可执行的线程,而Runnable接口则定义...
Java 5之后引入的java.util.concurrent包中提供了一系列的并发工具类,如`CountDownLatch`、`CyclicBarrier`、`Semaphore`、`Exchanger`等,使得多线程编程变得更加高效和安全。 以上知识点只是Java多线程技术中的...