生产者和消费者(资源数目多个)
来源:互联网 发布:无线局域网 网络凭证 编辑:程序博客网 时间:2024/05/17 20:33
package book.j2se5;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* BlockingQueue:如果BlockingQueue是空的,从BlockingQueue取东西
* 的操作都会被阻塞进入等待状态,直到BlockingQueue进了东西才会被唤醒。
* 同时如果BlockingQueue是满的,任何试图存东西的操作都被阻塞进入等待
* 状态。(可以放多个苹果)
* @author wuhailin
*
*/
public class BlockingQueueTest {
/**定义装苹果的篮子*/
public static class Basket{
//篮子,能够容纳3个苹果
BlockingQueue<String> basket=new ArrayBlockingQueue<String>(3);
//生产苹果,放入篮子
public void produce()throws InterruptedException{
//put方法放入一个苹果,若basket满了,等待basket有位置
basket.put("An apple");
}
//消费苹果,从篮子中取苹果
public String consume()throws InterruptedException{
//take方法取出一个苹果,若为空,则等待有苹果为止
return basket.take();
}
}
//测试方法
public static void testBasket(){
final Basket basket=new Basket();//建立一个装苹果的篮子
//定义苹果消费者
class Producer implements Runnable{
public void run(){
try{
while(true){
//生产苹果
System.out.println("生产者准备生产苹果:"+System.currentTimeMillis());
basket.produce();
System.out.println(" 生产者生产苹果完毕:"+System.currentTimeMillis());
Thread.sleep(300);
}
}catch(InterruptedException ex){
}
}
}
class Consumer implements Runnable{
public void run(){
try{
while(true){
System.out.println("消费者准备消费苹果:"+System.currentTimeMillis());
basket.consume();
System.out.println("消费者消费苹果完毕:"+System.currentTimeMillis());
Thread.sleep(1000);
}
}catch(InterruptedException ex){
}
}
}
ExecutorService service=Executors.newCachedThreadPool();
Producer producer=new Producer();
Consumer consumer=new Consumer();
service.submit(producer);
service.submit(consumer);
try{
Thread.sleep(5000);
}catch(InterruptedException e){
}
service.shutdownNow();
}
public static void main(String[] args) {
BlockingQueueTest.testBasket();
}
}
- 生产者和消费者(资源数目多个)
- 生产者消费者模型(多个生产者和多个消费者)JDK1.5之前实现版
- 生产者消费者模型(多个生产者和多个消费者)JDK1.5 (Lock&Condition)实现版
- java多线程 一个生产者和多个消费者
- Java多线程 9 多个生产者和消费者
- RabbitMQ消息通信,一个生产者和多个消费者
- day11多线程的安全问题-同步(技术锁)-多个生产者和消费者
- 多个生产者,多个消费者
- 多生产者和多消费者
- 多生产者和多消费者
- 生产者和消费者(Java)
- 生产者和消费者(一)
- 生产者和消费者(二)
- (52)多个生产者多个消费者出现的问题,解决方式synchronized方法和Lock方法
- 一个生产者多个消费者问题
- Napajs demo-多个生产者/消费者
- Java多线程 多个生产者和多个消费者实现同步 jdk1.4
- Java多线程 多个生产者和多个消费者实现同步 jdk1.5
- C#读取XML DOM方式读取
- 做vb.net的人有福了
- 接口和抽象类的区别
- 关于“论文”与“著作”之感慨
- J2EE项目代码编写规范
- 生产者和消费者(资源数目多个)
- 验证码(Java实现)
- WaitForSingleObject的用法
- 接受ctrl+enter事件,兼容FF和IE
- 对象与XML之间的转换
- 在VC6.0用file->open后,出现“MSDEV.EXE-应用程序错误
- 解决AJAX中文出现乱码的方法
- [推荐]2008年第四季度开发者Top 100 Blogs
- 用XSTL转化xml