同步**塊實現生產者消費者模式
classperson 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
}
同步方法實現生產者消費者模式
classperson 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 方法和語句所訪問的隱式監視器鎖相同的一些基本行為和語義,但功能更強大。
格式:
publicclass
x finally
}}
可重入鎖沒有同步監聽物件,咋辦呢?
lock 替代了 synchronized 方法和語句的使用,condition 替代了 object 監視器方法的使用。
classperson 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 implementsrunnable
}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 implementsrunnable
}synchronizedpublic
void
sale()
catch
(interruptedexception e)
system.out.println(thread.currentthread().getname() + "賣出第" + num-- + "張");}}
}public
class
ticketdemosyncbymethod
}
可重入鎖方式改寫賣票程式
class myrunnable implementsrunnable
}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...