在學習Lock實現生產者和消費者遇到的阻塞問題

2021-08-20 08:16:40 字數 1501 閱讀 9739

public class value
public class producer 

string value = system.currenttimemillis() + "_" + system.nanotime();

value.value = value;

system.out.println(thread.currentthread().getname()+"生產了value為:" + value);

condition.signal();

} catch (exception e) finally

}}

public class customer 

system.out.println(thread.currentthread().getname()+"消費了value,為:" + value.value);

value.value = "";

condition.signal();

} catch (exception e) finally

}}

public class testmain 

string value = system.currenttimemillis() + "_" + system.nanotime();

value.value = value;

system.out.println(thread.currentthread().getname()+"生產了value為:" + value);

condition.signal();

} catch (exception e) finally

synchronized ()

}public void getvalue()

system.out.println(thread.currentthread().getname()+"消費了value,為:" + value.value);

value.value = "";

condition.signal();

} catch (exception e) finally

}}

public class testmain {

public static void main(string args) throws exception {

producerandcustomer producerandcustomer = new producerandcustomer ();

runnable producerrunable = new runnable() {

@override

public void run() {

for (int i = 0; i 問題原因:沒有使用同乙個lock,生產者和消費者都是使用了各自的lock。所以釋放鎖和加鎖,各自不影響,導致程式阻塞。

生產者消費者問題 lock

public class public static void main string args class producer public void produce final intval start class consumer public void consume final intval...

Lock版本生產者和消費者模式

生產者的執行緒專門用來生產一些資料,存放到乙個中間變數中。消費者再從這個中間的變數中取出資料進行消費。但是因為要使用中間變數,中間變數通常是一些全域性變數,因此需要使用鎖來保證資料完整性。import random import threading gmoney 1000gtimes 0 gallt...

C 實現生產者和消費者

生產者 消費者模式是乙個十分經典的多執行緒併發協作的模式,弄懂生產者 消費者問題能夠讓我們對併發程式設計的理解加深。所謂生產者 消費者問題,實際上主要是包含了兩類執行緒,一種是生產者執行緒用於生產資料,另一種是消費者執行緒用於消費資料,為了解耦生產者和消費者的關係,通常會採用共享的資料區域,就像是乙...