首页 > 代码库 > 生产者消费者模式的java实现(实现三)
生产者消费者模式的java实现(实现三)
Exchanger是java.util.concurrent类库下的一个并发工具。下面是java api文档里对Exchanger的描述。
A synchronization point at which threads can pair and swap elements within pairs. Each thread presents some object on entry to the exchange method, matches with a partner thread, and receives its partner‘s object on return. An Exchanger may be viewed as a bidirectional form of a SynchronousQueue. Exchangers may be useful in applications such as genetic algorithms and pipeline designs.
也就是Exchanger必须是伴随一对线程出现。
package com.smikevon.concurrent;import java.util.Random;import java.util.concurrent.Exchanger;import java.util.concurrent.Executor;import java.util.concurrent.Executors;/** * @description: 生产者消费者模式使用exchanger来实现 * @date : 2014年9月18日 下午4:28:49 */public class ProducerConsumer_02 { static class Producer implements Runnable { private Exchanger<String> exchanger; private String name; public Producer(Exchanger<String> exchanger,String name){ this.exchanger = exchanger; this.name = name; } public void run() { String[] messages = { "我是", "一名程序员", "我很骄傲", "也很自豪", "爱岗敬业", "勤劳奉献", "无怨无悔", "奉献青春", "希望通过学习", "提升", "自己", "done", }; try { for(int i=0;i<messages.length;i++){ System.out.format("%s: 放入信息-----------%s %n",name,messages[i]); exchanger.exchange(messages[i]); Thread.sleep(new Random(System.currentTimeMillis()).nextInt(5000)); } } catch (InterruptedException e) { e.printStackTrace(); } } } static class Consumer implements Runnable{ private Exchanger<String> exchanger; private String name; public Consumer(Exchanger<String> exchanger,String name){ this.exchanger = exchanger; this.name = name; } public void run() { try { String message = ""; do{ message = exchanger.exchange(""); System.out.format("%s: 取出信息-------------%s %n",name,message); Thread.sleep(new Random(System.currentTimeMillis()).nextInt(5000)); }while(!message.equals("done")); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args){ Executor executor = Executors.newCachedThreadPool(); Exchanger<String> exchanger = new Exchanger<String>(); executor.execute(new Producer(exchanger,"生产者")); executor.execute(new Consumer(exchanger,"消费者")); }}
生产者消费者模式的java实现(实现三)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。