生产者消费者模式
来源:互联网 发布:常州市软件行业协会 编辑:程序博客网 时间:2024/06/06 02:25
作为一个初学者,对于多线程编程,完全没有概念,这时候你需要从最简单的多线程开始,通过一些简单的实例,去加深对于多线程的理解。对于多线程的概念什么的,我就不说了,反正我是说不清楚的,度娘上一大堆,不过在看那些定义之前,我觉得你最好能理解最简单的生产者-消费者模式,理解过后再去看那些枯燥的定义,或许能加深你对多线程的印象,废话不多说,直接上代码。
sychronized锁对象,在本例中锁的是馒头对象,注意在用到sychronized关键字的代码中,本段代码会被一直执行到末尾,才会释放出锁住的对象,以供线程争抢这个资源(这个线程可能会和上一个线程一样,意思就是说生产者生产一次,下一次可能生产者还会获得这个资源继续生产)。
需要注意的地方:对于馒头中的生产和消费方法,必须是原子性操作,什么意思呢,就是说里面写的是最基本的操作。举个例子一个循环需要循环n次,那么它的每次循环就是最原子的操作。这个操作一旦被加上sychronized关键字,那么每次循环都会执行到末尾才结束,而不受wait()方法影响。wait()和notify()方法只会配合sychronized使用。
wait()和notifiy()方法会阻断当前线程的进行,wait()方法释放对象锁,线程会处于等待状态,再等待notify()的唤醒,再次进入到可运行状态,下面附上线程各个状态间的转换关系图。
public class Mantou {
int list;
public Mantou(int list){
this.list = list;
}
public void produce(){
synchronized (this) {
if(list>=500){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
list++;
System.out.println("prodeucer馒头数量为"+list);
this.notifyAll();
}
}
}
public void consume(){
synchronized (this) {
if(list<=0){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
list--;
this.notifyAll();
System.out.println("consumer馒头数量为"+list+"-------------");
}
}
}
}
public class Producer extends Thread{
Mantou m ;
public Producer(Mantou m){
this.m = m;
}
@Override
public void run() {
for(int i =0;i<500;i++){
m.produce();
// try {
// this.sleep(500);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
}
}
public class Consumer extends Thread{
public Mantou m;
public Consumer(Mantou m){
this.m = m;
}
@Override
public void run() {
for(int i =0;i<500;i++){
m.consume();
// try {
// this.sleep(500);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
}
}
public class Test {
public static void main(String[] args) {
int list =0;
Mantou m = new Mantou(list);
Producer p = new Producer(m);
Consumer c = new Consumer(m);
p.start();
c.start();
}
}
- 生产者—消费者模式
- 生产者-消费者模式
- 消费者与生产者模式
- 消费者与生产者模式
- 消费者与生产者模式
- 生产者消费者模式浅析
- 生产者消费者模式
- 生产者/消费者模式
- 生产者/消费者模式
- 生产者-消费者模式
- 【转】生产者消费者模式
- 生产者、消费者模式
- 生产者/消费者模式
- 生产者/消费者模式
- 生产者/消费者模式(转载)
- 生产者消费者模式浅析
- 生产者消费者模式浅析
- 生产者消费者模式
- 课堂笔记11
- Wrong number of segments in token:
- android知识图谱
- 【算法】将正整数表示为平方数之和
- 7.1线程2015/8/2
- 生产者消费者模式
- ios block回调实现方法
- 我和程序员打了13年交道后,为什么做了缘创派?
- 算法速成(7)图操作
- 使用厄拉多塞筛法计算素数的和
- C# I/O 助手类
- 银行卡输入自动断开 如1111 2222 3333 444
- 也谈 Euler Problem 13
- iOS Provisioning Profile(配置文件)与Code Signing详解