首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java BlockingQueue 拥塞队列版多线程消费生产实例

2012-08-24 
java BlockingQueue 阻塞队列版多线程消费生产实例BlockingQueue为阻塞队列,它的实现形式有许多中,有固定

java BlockingQueue 阻塞队列版多线程消费生产实例

BlockingQueue为阻塞队列,它的实现形式有许多中,有固定的,链表的等等。机制都一样,让进入的线程加入等待

?

以下是BlockingQueue 阻塞队列版多线程消费生产实例:

?

public class Fetcher implements Runnable {private BlockingQueue<String> queue = null;public Fetcher(BlockingQueue<String> queue){this.queue = queue;}@Overridepublic void run() {// TODO Auto-generated method stubtry{int i=0;/*while(true){*/for(i=0;i<5;i++){queue.put("segment-name-"+i);System.out.println("ThreadName : "+Thread.currentThread().getName()+"抓取完成");}Thread.sleep(50000);int j=0;for(j=0;j<25;j++){queue.put("segment-name-"+(j+i));System.out.println("ThreadName : "+Thread.currentThread().getName()+"抓取完成");}System.out.println(Thread.currentThread().getName()+"thread--------"+(i+j));}catch (InterruptedException e) {// TODO: handle exceptione.printStackTrace();}}}

?

? ?生产者

?

?

?

public class Indexer implements Runnable {private BlockingQueue<String> queue;public Indexer(BlockingQueue<String> queue){this.queue = queue;}@Overridepublic void run() {// TODO Auto-generated method stubtry{/*while(true){*/int i;for(i=0;i<10;i++){Thread.sleep(1000);String name = queue.take();System.out.println("ThreadName : " +Thread.currentThread().getName()+ " 索引创建完成 " +name);  }}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}

? ?消费者

?

?

package com.test;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class TestConsumer {private static BlockingQueue<String> queue = new ArrayBlockingQueue<String>(10);public static void main(String[] args){ExecutorService service = Executors.newCachedThreadPool();Fetcher producer = new Fetcher(queue);Indexer consumer = new Indexer(queue);Indexer consumerSecond = new Indexer(queue);service.submit(producer);service.submit(consumer);service.submit(consumerSecond);try{Thread.sleep(5000);}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}

? ?主函数

?

?

?

热点排行