BlockingQueue的一个小例子
2012-07-13 20:27
281 查看
生产者:
package test.a;
import java.util.concurrent.BlockingQueue;
public class Consumer implements Runnable {
private final BlockingQueue queue;
Consumer(BlockingQueue q) {
queue = q;
}
public void run() {
try {
for(int i=0;i<10;i++){
consume(queue.take());
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
void consume(Object x) {
System.out.println(x);
}
}
消费者:
package test.a;
import java.util.concurrent.BlockingQueue;
public class Producer implements Runnable {
private final BlockingQueue queue;
Producer(BlockingQueue q) {
queue = q;
}
public void run() {
try {
for(int i=0;i<10;i++){
queue.put(produce(i));
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
Object produce(int i) throws InterruptedException {
return "queue"+i;
}
}
package test.a;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import test.Consumer;
import test.Producer;
public class Setup {
public static void main(String[] args) {
BlockingQueue q = new ArrayBlockingQueue(10);
// Producer p = new Producer(q);
// Consumer c1 = new Consumer(q);
// Consumer c2 = new Consumer(q);
// new Thread(c2).start();
// new Thread(p).start();
// new Thread(c1).start();
ExecutorService service = Executors.newCachedThreadPool();
Consumer consumer = new Consumer(q);
Producer producer = new Producer(q);
service.submit(producer);
service.submit(consumer);
service.shutdown();
}
}
package test.a;
import java.util.concurrent.BlockingQueue;
public class Consumer implements Runnable {
private final BlockingQueue queue;
Consumer(BlockingQueue q) {
queue = q;
}
public void run() {
try {
for(int i=0;i<10;i++){
consume(queue.take());
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
void consume(Object x) {
System.out.println(x);
}
}
消费者:
package test.a;
import java.util.concurrent.BlockingQueue;
public class Producer implements Runnable {
private final BlockingQueue queue;
Producer(BlockingQueue q) {
queue = q;
}
public void run() {
try {
for(int i=0;i<10;i++){
queue.put(produce(i));
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
Object produce(int i) throws InterruptedException {
return "queue"+i;
}
}
package test.a;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import test.Consumer;
import test.Producer;
public class Setup {
public static void main(String[] args) {
BlockingQueue q = new ArrayBlockingQueue(10);
// Producer p = new Producer(q);
// Consumer c1 = new Consumer(q);
// Consumer c2 = new Consumer(q);
// new Thread(c2).start();
// new Thread(p).start();
// new Thread(c1).start();
ExecutorService service = Executors.newCachedThreadPool();
Consumer consumer = new Consumer(q);
Producer producer = new Producer(q);
service.submit(producer);
service.submit(consumer);
service.shutdown();
}
}
相关文章推荐
- 一个百度定位例子,把自己的经纬度转换为具体位置
- Intelli Idea下 一个Spark的小例子
- 一个更加明显的rownum的例子
- CoordinatorLayout的一个例子
- Monitor同步的一个例子
- 一个内核模块例子(实现调用其他模块中的方法,传递参数等)
- 一个linq+lambda 表达式 分页查询的例子(查询 一段时间内所有用户登陆的次数)
- SpringBoot专题(1) 一个的简单的SpringBoot例子
- 一个新消息类创建的例子
- Linux多线程编程和信号易疏忽的一个例子
- MySQL一个索引最多有多少个列?真实的测试例子
- 一个用ArrayCollection作为数据格式 读取远程XML绑定到DropDownList例子
- 一个使用FFmpeg库读取3gp视频的例子-Android中使用FFmpeg媒体库
- java一个简单的内存泄漏的例子
- 一个功能齐全的DataGrid分页例子
- 一个builder模式的例子
- 一个例子学懂搜索引擎(lucene)
- 非常简单的一个for-each循环例子
- document.getElementsByName 的一个例子
- 一个C#中webservice的初级例子(一)