`

同步器--Exchanger

    博客分类:
  • J2SE
阅读更多

用于实现两个线程间的数据交换,每个线程在完成一定的任务后想与对方交换数据,第一个先拿出数据的线程将一直等待第二个线程拿着数据到来时,才能彼些交换数据.

public class ExchangerTest {
	public static void main(String[] args) {
		final Exchanger<String> exchanger = new Exchanger<String>();
		
		ExecutorService service = Executors.newCachedThreadPool();
		service.execute(new Runnable() {
			public void run() {
				try {

					String data1 = "人民币";
					System.out.println("线程" + Thread.currentThread().getName()
							+ "正在把数据" + data1 + "换出去");
					Thread.sleep((long) (Math.random() * 10000));
					String data2 = exchanger.exchange(data1);
					System.out.println("线程" + Thread.currentThread().getName()
							+ "换回的数据为" + data2);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		service.execute(new Runnable() {
			public void run() {
				try {

					String data1 = "白粉";
					System.out.println("线程" + Thread.currentThread().getName()
							+ "正在把数据" + data1 + "换出去");
					Thread.sleep((long) (Math.random() * 10000));
					String data2 = exchanger.exchange(data1);
					System.out.println("线程" + Thread.currentThread().getName()
							+ "换回的数据为" + data2);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		service.shutdown();
	}
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java并发编程之同步器代码示例

    Java并发编程之同步器代码示例 ...Java并发编程之同步器代码示例展示了Java中的同步器机制,包括CountDownLatch、Semaphore、Barrier和Exchanger队列同步器等,帮助开发者更好地理解和使用Java中的并发编程技术。

    第20章 Part4 并发工具同步器.pdf

    - **同步器**:用于实现线程间的同步操作,常见的同步器包括`Semaphore`、`CountDownLatch`、`CyclicBarrier`、`Exchanger`和`Phaser`等。 - **执行器**:用于管理和控制线程的执行,如`ExecutorService`等。 - **...

    Java多线程同步器代码详解

    本文将深入解析四种主要的同步器:CountDownLatch、Semaphore、Barrier和Exchanger,并通过代码示例进行讲解。 1. **CountDownLatch** CountDownLatch是一个计数器,通常用于一次性事件,如等待所有线程完成某个...

    Java后端技术面试汇总-2019

    - **AQS同步队列**:AbstractQueuedSynchronizer,提供了一个框架来实现锁和同步器。 - **CAS无锁的概念**:Compare and Swap,乐观锁的一种实现。 - **常见的原子操作类**:AtomicInteger、AtomicLong等。 - **...

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

    - 同步锁机制通过监视器锁(Monitor)实现,每个对象都有一个内置锁,即监视器。 3. **Java并发工具包JUC**: - JUC包含了许多高级并发组件,如`Semaphore`信号量、`CyclicBarrier`回环栅栏、`CountDownLatch`倒...

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

    除了原子量和同步器,JDK并发包还提供了显式锁,如ReentrantLock,它提供了比synchronized更灵活的控制,包括公平锁和非公平锁,以及可中断的锁等待和定时锁等待。 总之,JDK并发包为开发者提供了丰富的工具来处理...

    java加强笔记

    Java5的Exchanger同步工具 - `Exchanger`可以实现线程间的双向交换。 ##### 18. Java5阻塞队列的应用 - 阻塞队列(`BlockingQueue`)提供了一种线程安全的队列实现。 ##### 19. Java5同步集合类的应用 - 同步集合类...

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

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

    java面试题总结资料.zip

    - 并发工具类:Semaphore、CyclicBarrier、CountDownLatch、Exchanger 5. **JVM相关**: - 类加载机制(加载、验证、准备、解析、初始化) - 垃圾收集算法(标记-清除、复制、标记-整理、分代收集) - 堆内存...

    Java程序员面试宝典(杨磊) PDF 扫描版-1

    - **线程的创建与同步**:通过Thread类、Runnable接口创建线程,synchronized关键字,wait/notify机制。 - **线程池**:ExecutorService,ThreadPoolExecutor的配置与使用。 - **并发工具类**:Semaphore、...

    exchange邮件

    为了保持数据同步,需要在中心传输服务器上运行Start-EdgeSynchronization命令,然后使用Test-EdgeSynchronization命令检查同步状态。在这一阶段,可能需要删除之前为中心服务器建立的到Internet的发送连接器,因为...

    【面试资料】-(机构内训资料)java面试题_多线程(68题).zip

    ** 如CountDownLatch、CyclicBarrier、Semaphore、Exchanger、Phaser等,用于线程间的协作。 10. **线程安全** - **什么是线程安全?** 多线程环境下,类的行为正确且结果一致。 - **如何实现线程安全?** 使用...

    java面试题

    - 线程同步机制:synchronized关键字、wait/notify机制、ReentrantLock等。 - 线程池的理解与使用:ExecutorService、ThreadPoolExecutor、ScheduledThreadPoolExecutor。 4. **IO流与NIO**: - IO流的分类:...

    java 面试题总会

    - 理解线程同步机制:synchronized关键字,wait(), notify(), notifyAll()方法。 - 掌握并发工具类(Semaphore, CyclicBarrier, CountDownLatch, Exchanger等)。 6. **反射**: - 学习Class类,以及如何通过...

    Java基础面试题全面试题

    - 理解并发工具类,如Semaphore、CountDownLatch、CyclicBarrier、Exchanger等。 7. **IO流** - 理解字节流和字符流的区别,掌握FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等常用流的...

Global site tag (gtag.js) - Google Analytics