執行緒的生產者消費者

2022-09-14 19:51:10 字數 2523 閱讀 5595

新建乙個產品person

package cn.lucky.producer;

/** * @author lucky

*/public class person

public synchronized void pop()

}

新建生產者

package cn.lucky.producer;

/** * @author lucky

*/public class producer implements runnable

@override

public void run() else }}

}

新建消費者

package cn.lucky.producer;

/** * @author lucky

*/public class consumer implements runnable

@override

public void run() }}

測試

package cn.lucky.producer;

/** * @author lucky

*/public class test

}).start();

new thread(new runnable()

}).start();}}

結果

我們發現,全是marry,跟我們預期的tom---11,marry---21迴圈不一樣。

我們加個執行緒休眠擴大一下現象。

雖然出現了tom---11,但是我們還是沒有達到理想效果,要如何達到呢?

首先我們對生產消費加個鎖

我們會發現要麼全是tom,要麼全是marry,要麼一半連續出現tom,一半連續marry

同步鎖池的概念就出現了:

同步鎖池:同步鎖必須選擇多個執行緒共同的資源物件,而乙個執行緒獲得鎖的時候,別的執行緒都在同步鎖池等待獲取鎖;當那個執行緒釋放同步鎖了,其他執行緒便開始由cpu排程分配鎖

這是object類中的方法

wait():執行該方法的執行緒物件,釋放同步鎖,jvm會把該執行緒放到等待池中,等待其他執行緒喚醒該執行緒

notify():執行該方法的執行緒喚醒在等待池中等待的任意乙個執行緒,把執行緒轉到鎖池中等待(注意鎖池和等待池的區別)

notifyall():執行該方法的執行緒喚醒在等待池中等待的所有執行緒,把執行緒轉到鎖池中等待。

注意:上述方法只能被同步監聽鎖物件來呼叫,這也是為啥wait() 和 notify()方法都在 object 物件中,因為同步監聽鎖可以是任意物件,只不過必須是需要同步執行緒的共同物件即可,否則別的物件呼叫會報錯:j**a.lang.illegalmonitorstateexception

**如下:

package cn.lucky.producer;

/** * @author lucky

*/public class person

thread.sleep(10);

this.name = name;

this.age = age;

flag=false;

this.notifyall();

} catch (interruptedexception e)

}public synchronized void pop()

thread.sleep(10);

system.out.println(this.name + "---" + this.age);

flag=true;

this.notifyall();

} catch (interruptedexception e) }}

測試結果:

完結!

生產者消費者執行緒

include include include includeusing namespace std typedef int semaphore 訊號量是一種特殊的整型變數 const int size of buffer 5 緩衝區長度 const unsigned short producers...

生產者消費者執行緒

該簡單生產者 消費者執行緒,屬於本人學習過程中的一段練習 如有不足,請指點 package com.lanqiao.demo3 author 大廣子 類說明 簡單的生產者,消費者執行緒 public class threadptcs catch interruptedexception e 退出 s...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...