Exchanger 实现两个伙伴线程之间的数据交互
2013-01-25 11:59
609 查看
package thread; import java.util.LinkedList; import java.util.List; import java.util.concurrent.Exchanger; /** * 下面的例子模拟生产者生产物品 后 与消费者交换数据 * @author zhoufeng * */ public class ExchangeDemo { /* 如果两条线程要交换的类型是一样的 就可以为 Exchanger 加上泛型,如果不是一样的就不要加泛型 */ private final Exchanger exg = new Exchanger() ; private class Producer implements Runnable{ List<String> list = new LinkedList<String>(); public void run() { try { for (int i = 0; i < 5 ; i++) { String str = "producer 生产第" + i + "条数据" ; list.add(str) ; } System.out.println("producer 生产完毕,等待交换数据..."); String result = (String)exg.exchange(list) ; //交换数据 System.out.println("producer 等待交换数据完成..."); // 打印消费者线程返回的消息 System.out.println("print by producer : 收到" + result); } catch (InterruptedException e) { e.printStackTrace(); } } } /* 消费者 */ private class Customer implements Runnable{ List<String> list = new LinkedList<String>(); public void run() { try { Thread.sleep(5000) ; //睡眠5s 。模拟赚钱 System.out.println("customer 生产完毕,等待交换数据..."); list = (List)exg.exchange("5000¥") ; //交换数据 System.out.println("customer 等待交换数据完成..."); for (String s : list) { System.out.println("print by customer : " + s); } } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { ExchangeDemo ed = new ExchangeDemo(); new Thread(ed.new Producer()).start() ; new Thread(ed.new Customer()).start() ; } }
相关文章推荐
- 黑马程序员-Condition条件对象、Semaphore、CyclicBarrier、倒计时门栓 CountDownLatch、Exchanger(实现两个线程之间数据交换
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- 安编程中使用handleMessage实现线程之间数据交互
- Exchanger两个线程之间交换数据
- Android消息机制之实现两个不同线程之间相互传递数据相互调用
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- Exchanger两个线程之间的数据交换
- java学习——使用Exchanger实现两个线程间的数据交换
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- VC使用剪切板实现两个应用程序之间的数据交互
- Unison+inotify实现两个主机目录之间的数据双向同步
- Oracle中通过Job实现定时同步两个数据表之间的数据
- C#使用委托(delegate)实现在两个form之间传递数据的方法
- 利用DBLink+JOB实现两个Oracle数据库之间的数据同步