jdk執行緒的生產者消費者問題

2021-09-06 18:22:45 字數 4324 閱讀 9685

同步**塊實現生產者消費者模式

class

person catch (interruptedexception e) {}

}

this.name =name;

try catch

(interruptedexception e)

this.*** =***;

//生產者生產之後,應該修改儲存區域的狀態

isempty = boolean.false;//

不為空this.notifyall();//

喚醒消費者,起來吃東西了

} }

//消費

public

void

get() catch (interruptedexception e) {}

} string name =getname();

string *** =get***();

system.out.println(name + " --> " +***);

//消費完成,應該修改儲存區域的狀態

isempty = boolean.true;//

空了this.notifyall();//

喚醒生產者,

} }

getter/setter}//

生產者class producer implements

runnable

public

void

run()

else

}}}//

消費者class consumer implements

runnable

public

void

run()

}}public

class

producer_consumerdemo

}

同步方法實現生產者消費者模式

class

person catch (interruptedexception e) {}

}

this.name =name;

try catch

(interruptedexception e) {}

this.*** =***;

//生產者生產之後,應該修改儲存區域的狀態

isempty = boolean.false;//

不為空this.notifyall();//

喚醒消費者,起來吃東西了

}

//消費

public

synchronizedvoid

get() catch (interruptedexception e) {}

} string name =getname();

string *** =get***();

system.out.println(name + " --> " +***);

//消費完成,應該修改儲存區域的狀態

isempty = boolean.true;//

空了this.notifyall();//

喚醒生產者,

} getter/setter}//

生產者class producer implements

runnable

public

void

run()

else}}

}class consumer implements

runnable

public

void

run()

}}public

class

producer_consumerdemo

}

可重入鎖實現生產者消費者模式

jkd1.5後的另一種同步機制:通過顯示定義同步鎖物件來實現同步,這種機制,同步鎖應該使用lock物件充當;

在實現執行緒安全控制中,通常使用reentrantlock(可重入鎖)。使用該物件可以顯示地加鎖和解鎖

具有與使用 synchronized 方法和語句所訪問的隱式監視器鎖相同的一些基本行為和語義,但功能更強大。

格式:

public

class

x finally

}}

可重入鎖沒有同步監聽物件,咋辦呢?

lock 替代了 synchronized 方法和語句的使用,condition 替代了 object 監視器方法的使用

class

person catch

(interruptedexception e) {}}

try

catch (interruptedexception e) {} finally

}//消費

public

void

get()

catch

(interruptedexception e)

}try

finally

}getter/setter}//

生產者class producer implements

runnable

public

void

run()

else}}

}class consumer implements

runnable

public

void

run()

}}public

class

producer_consumerdemo

}

同步**塊方式改寫賣票程式

class myrunnable implements

runnable

}private object o = new

object();

public

void

sale() catch

(interruptedexception e) {}

system.out.println(thread.currentthread().getname() + "賣出第"

+ num-- + "張");}}

}}public

class

ticketdemosyncbyblock

}

實現runnable介面的方式,使用同步**塊的方式進行同步。

可以取的同步監聽物件為:this、當前方法所在類的class物件、任一不變物件

同步方法方式改寫賣票程式

class myrunnable implements

runnable

}synchronizedpublic

void

sale()

catch

(interruptedexception e)

system.out.println(thread.currentthread().getname() + "賣出第" + num-- + "張");}}

}public

class

ticketdemosyncbymethod

}

可重入鎖方式改寫賣票程式

class myrunnable implements

runnable

}public

void

sale()

catch

(interruptedexception e)

system.out.println(thread.currentthread().getname() + "賣出第"

+ num-- + "張");}}

finally

}}public

class

ticketdemosyncbyreentrantlock

}

生產者消費者執行緒

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...

執行緒的生產者消費者

新建乙個產品person package cn.lucky.producer author lucky public class person public synchronized void pop 新建生產者 package cn.lucky.producer author lucky publ...