生产者--消费者模式,理解多线程并发
来源:互联网 发布:陈氏书法家 软件 编辑:程序博客网 时间:2024/05/22 00:55
解决生产者消费者的最有效的方式是阻塞队列
举个例子就是一个负责吃,一个负责造,东西放在一张桌子上。
生产者准备食物,如果桌子上已经满了就等待,生产者等待。如果桌子空了的话,消费者等待。这里桌子就是一个共享的对象
生产者消费者模式常用于多线程或者并发代码
优点:
- 它简化的开发,你可以独立地或并发的编写消费者和生产者,它仅仅只需知道共享对象是谁
- 生产者不需要知道谁是消费者或者有多少消费者,对消费者来说也是一样
- 生产者和消费者可以以不同的速度执行
- 分离的消费者和生产者在功能上能写出更简洁、可读、易维护的代码
BlockingQueue 一个接口,Java提供了不同的现实,如ArrayBlockingQueue和LinkedBlockingQueue,两者都是先进先出(FIFO)顺序。
而ArrayLinkedQueue是自然有界的,LinkedBlockingQueue可选的边界。
下面这是一个完整的生产者消费者代码例子,对比传统的wait、nofity代码,它更易于理解
import
java.util.concurrent.BlockingQueue;
import
java.util.concurrent.LinkedBlockingQueue;
import
java.util.logging.Level;
import
java.util.logging.Logger;
public
class
ProducerConsumerPattern {
public
static
void
main(String args[]){
//Creating shared object
BlockingQueue sharedQueue =
new
LinkedBlockingQueue();
//Creating Producer and Consumer Thread
Thread prodThread =
new
Thread(
new
Producer(sharedQueue));
Thread consThread =
new
Thread(
new
Consumer(sharedQueue));
//Starting producer and Consumer thread
prodThread.start();
consThread.start();
}
}
//Producer Class in java
class
Producer
implements
Runnable {
private
final
BlockingQueue sharedQueue;
public
Producer(BlockingQueue sharedQueue) {
this
.sharedQueue = sharedQueue;
}
@Override
public
void
run() {
for
(
int
i=
0
; i<
10
; i++){
try
{
System.out.println(
"Produced: "
+ i);
sharedQueue.put(i);
}
catch
(InterruptedException ex) {
Logger.getLogger(Producer.
class
.getName()).log(Level.SEVERE,
null
, ex);
}
}
}
}
//Consumer Class in Java
class
Consumer
implements
Runnable{
private
final
BlockingQueue sharedQueue;
public
Consumer (BlockingQueue sharedQueue) {
this
.sharedQueue = sharedQueue;
}
@Override
public
void
run() {
while
(
true
){
try
{
System.out.println(
"Consumed: "
+ sharedQueue.take());
}
catch
(InterruptedException ex) {
Logger.getLogger(Consumer.
class
.getName()).log(Level.SEVERE,
null
, ex);
}
}
}
}
阅读全文
0 0
- 生产者--消费者模式,理解多线程并发
- 多线程生产者消费者模式
- 生产者消费者模式 多线程
- 多线程-生产者消费者模式
- 生产者消费者模式理解
- 多线程的并发执行应用(生产者消费者模式)
- java多线程-专题-聊聊并发(十)生产者消费者模式
- Java多线程之并发协作生产者消费者设计模式
- Java多线程之并发协作生产者消费者设计模式
- Java多线程Thread-并发协作(生产者消费者设计模式)
- Java多线程之并发协作生产者消费者设计模式
- Java多线程之并发协作生产者消费者设计模式
- Java多线程之并发协作生产者消费者设计模式
- java多线程中的 生产者消费者模式入门级理解
- java多线程 ----生产者消费者模式
- Java多线程 --- 生产者消费者模式
- Java多线程 生产者消费者模式
- 多线程应用--生产者、消费者模式
- Hibernate初运行异常---:MySQL server version for the right syntax to use near 'type=InnoDB'
- 第七次作业
- Vue.extend构造器
- ContextLoaderListener的作用
- 科学经得起实践检验-python3.6通过决策树实战精准准确预测今日大盘走势(含代码)
- 生产者--消费者模式,理解多线程并发
- java 序列化与反序列化总结
- JS&JQUERY详解
- VC INT转RGB
- PreparedStatement用法
- 第十二次实验 继承
- request.getparameter和 request.getattribute的区别
- poj1644分苹果
- maven package install deploy区别