`

多线程之Exchanger

 
阅读更多

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
0
0
分享到:
评论

相关推荐

    Android多线程全新讲解.pdf

    2. Java多线程高级特性:内容中出现的“ThreadLocal”,“CyclicBarrier”,“CountDownLatch”,“Exchanger”,“ArrayBlockingQueue”,“Lock”,“Condition”和“Semaphore”,这些都是Java 5以后版本引入的...

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

    Java多线程编程中的Exchanger是一个非常有用的工具类,它位于`java.util.concurrent`包下,主要用于线程间的数据交换。Exchanger的核心功能是让两个线程在一个同步点相遇,进行数据交换。当一个线程调用`exchange`...

    thread.zip--狂神多线程+juc

    《狂神多线程+juc》是一份针对Java并发编程深度学习的资源包,主要涵盖了Java多线程基础以及Java并发工具集(JUC)的高级应用。在Java编程中,多线程是提高程序效率、实现并发执行的重要手段,而JUC(Java ...

    多线程通信ThreadDemo

    在Java编程中,多线程通信是一个重要的概念,特别是在并发编程中。`ThreadDemo`示例可能演示了如何在不同的线程之间有效地传递信息。线程通信是解决多个执行流同步和协作的关键,确保数据的一致性和正确性。以下是...

    马士兵多线程训练营笔记

    在IT领域,多线程是并发编程中的一个关键概念,特别是在Java这样的多线程支持语言中。马士兵是一位知名的IT教育专家,他的多线程训练营笔记深入浅出地讲解了这一主题,帮助开发者理解并掌握多线程的精髓。 多线程...

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

    3. Exchanger的应用场景:Exchanger可以应用于各种需要线程之间交换数据的场景,例如,在多线程编程中,Exchanger可以用来实现线程之间的数据交换,从而提高程序的效率和可靠性。 Exchanger的优点: 1. 方便易用:...

    张孝祥Java多线程与并发库高级应用笔记

    ### 张孝祥Java多线程与并发库高级应用笔记概览 #### 一、Java多线程技术的重要性与挑战 Java线程技术是软件工程领域不可或缺的一部分,尤其在底层编程、Android应用开发以及游戏开发中,其重要性不言而喻。然而,...

    多线程笔记_java/多线程_

    在Java编程语言中,多线程是程序设计中的一个重要概念,尤其在开发高效能和响应迅速的应用时。本文档将全面解析多线程的基础知识,从简单到复杂,帮助开发者深入理解并掌握这一核心技术。 一、多线程基础 1.1 线程...

    深入了解java多线程

    Java作为一门广泛使用的编程语言,其对多线程的支持是其强大功能之一。多线程允许程序在单个进程中并发执行多个任务,从而提高了程序的效率和响应性。本文将深入探讨Java多线程的核心概念,包括线程的定义、线程的...

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

    在深入探讨Java多线程与并发库的高级应用前,有必要了解一些基础概念。Java线程是Java程序的基础,它代表程序中的一条执行线索或线路。在Java中创建线程有两种传统方式,一种是通过继承Thread类并覆盖其run方法来...

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

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

    【2018最新最详细】并发多线程教程

    【2018最新最详细】并发多线程教程,课程结构如下 1.并发编程的优缺点 2.线程的状态转换以及基本操作 3.java内存模型以及happens-before规则 4.彻底理解synchronized 5.彻底理解volatile 6.你以为你真的了解final吗...

    java多线程设计模式(pdf)

    《Java多线程设计模式》是一本专注于Java并发编程的权威指南,对于深入理解Java并发机制和提升多线程编程技能具有极高的价值。这本书详细介绍了如何在Java环境中有效地使用多线程,以及如何设计出高效、可维护的并发...

    深入解析Java多线程

    最后,我们还需要了解Java并发工具类,如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)和Exchanger(交换器),它们为多线程编程提供了强大的支持。 总结来说,Java多线程涉及的内容...

    JAVA集合、多线程

    4. **并发工具类**:java.util.concurrent包提供了多种并发工具,如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)和Exchanger(交换器),它们为多线程编程提供了更高级别的抽象和控制...

    面向Java多线程机制的软件重构方法.pdf

    2. 使用并发工具类:如`CountDownLatch`, `CyclicBarrier`, `Semaphore`, `Exchanger`等,提升多线程编程的灵活性和安全性。 3. 线程安全的数据结构:`ConcurrentHashMap`, `CopyOnWriteArrayList`等并发容器可保证...

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

    在Java编程中,多线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而提高了系统的效率和响应性。然而,在某些场景下,我们可能需要控制线程的执行顺序,确保它们按照特定的顺序交替运行,这在并发编程...

    Java开发实战从入门到精通视频教程下载第9章 多线程.zip

    在现代计算环境中,多线程编程已经成为开发者必备的技能之一。 一、多线程基础 Java中的多线程可以通过两种主要方式实现:继承Thread类或实现Runnable接口。Thread类代表了一个可执行的线程,而Runnable接口则定义...

    JAVA中多线程技术的实现.pdf

    Java 5之后引入的java.util.concurrent包中提供了一系列的并发工具类,如`CountDownLatch`、`CyclicBarrier`、`Semaphore`、`Exchanger`等,使得多线程编程变得更加高效和安全。 以上知识点只是Java多线程技术中的...

Global site tag (gtag.js) - Google Analytics