zoukankan      html  css  js  c++  java
  • java5 Exchanger数据交换

    Java并发API提供了一种允许2个并发任务间相互交换数据的同步应用。更具体的说,Exchanger类允许在2个线程间定义同步点,当2个线程到达这个点,他们相互交换数据类型,使用第一个线程的数据类型变成第二个的,然后第二个线程的数据类型变成第一个的。

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

    package com.ljq.test.thread;
    
    import java.util.concurrent.Exchanger;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class ExchangerTest {
    
    	public static void main(String[] args) {
    		
    		ExecutorService service = Executors.newCachedThreadPool();
    		final Exchanger exchanger = new Exchanger();
    		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 = (String)exchanger.exchange(data1);
    					System.out.println("线程" + Thread.currentThread().getName() + "换回的数据为'" + data2+"'");
    				}catch(Exception e){
    					
    				}
    			}	
    		});
    		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 = (String)exchanger.exchange(data1);
    					System.out.println("线程" + Thread.currentThread().getName() + "换回的数据为'" + data2 + "'");
    				}catch(Exception e){
    					
    				}				
    			}	
    		});		
    	}
    }

    返回结果:

    线程pool-1-thread-1正在把数据'张三'换出去
    线程pool-1-thread-2正在把数据'李四'换出去
    线程pool-1-thread-1换回的数据为'李四'
    线程pool-1-thread-2换回的数据为'张三'
    

      

  • 相关阅读:
    关于Mac上的开发工具
    关于VS2008和VS2013中字体的选择
    实验四 使用ASP.NET内置对象 总结
    实验三 使用ASP.NET常用服务器控件 总结
    实验二 C#程序设计 总结
    实验一 ASP.NET应用环境配置 总结
    关于PHP.INI中的错误ERROR报告级别设置
    获取当前网址跟目录
    PHP获取站点根目录
    php 上传图片
  • 原文地址:https://www.cnblogs.com/linjiqin/p/4512155.html
Copyright © 2011-2022 走看看