Thread同步 |
答題得分者是:neoart
|
Randgris
一般會員 發表:20 回覆:30 積分:10 註冊:2007-04-15 發送簡訊給我 |
|
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
請你先看API(英文不好,吃這行飯會很辛苦)
請參考大作:http://www.oreilly.com.tw/product_java.php?id=a159_toc http://programming.im.ncnu.edu.tw/J_Chapter9.htm (先問Google,再來問我,我是黑手出身,只對實務上的東東有點小經驗罷了)
編輯記錄
neoart 重新編輯於 2007-05-06 08:43:53, 註解 無‧
|
Randgris
一般會員 發表:20 回覆:30 積分:10 註冊:2007-04-15 發送簡訊給我 |
什麼是黑手呀xd? 別禁我~_~
===================引 用 neoart 文 章=================== 請你先看API(英文不好,吃這行飯會很辛苦) 請參考大作:http://www.oreilly.com.tw/product_java.php?id=a159_toc http://programming.im.ncnu.edu.tw/J_Chapter9.htm (先問Google,再來問我,我是黑手出身,只對實務上的東東有點小經驗罷了) |
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
|
Randgris
一般會員 發表:20 回覆:30 積分:10 註冊:2007-04-15 發送簡訊給我 |
public synchronized void Sell(String A , int B)
{ Se = B ; // 取得訂單數量 while(Count < Se) { try{ this.wait( ) ; } // 讓執行緒進入待命狀態 catch(Exception e){ } } this.notifyAll( ) ; // 讓待命狀態中的所有執行緒都予以執行 Count = Count - Se ; // 計算銷貨之後的剩餘庫存 System.out.println( A " 銷貨 " B " , 目前尚餘貨品 " Count) ; // 顯示銷貨明細與庫存資訊 } // 結束方法 } // 當某一thread wait住時,它收到notify之後,是從新進入進爭進入public synchronized void Sell(String A , int B)裡 還是從wait下一行開始繼續執行呢? |
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
|
Randgris
一般會員 發表:20 回覆:30 積分:10 註冊:2007-04-15 發送簡訊給我 |
|
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
你可能有點誤解了
我們來做個比喻吧 A跟B都是營業員,賣wii的 當他們要賣wii時(注意,這個函數是synchonized--單一櫃台),庫存不足時,跟好等到在那裡, 但是還是要有廠商去增加庫存,這時可以用notify的方式,告知營業員可以"繼續"進行交易. 類似的實作如下: URL來源:http://www.roseindia.net/javatutorials/blocking_queue.shtml //: BlockingQueue.java import java.util.*; public class BlockingQueue { /** It makes logical sense to use a linked list for a FIFO queue, although an ArrayList is usually more efficient for a short queue (on most VMs). */ private final LinkedList queue = new LinkedList(); /** This method pushes an object onto the end of the queue, and then notifies one of the waiting threads. */ public void push(Object o) { synchronized(queue) { queue.add(o); queue.notify(); } } /** The pop operation blocks until either an object is returned or the thread is interrupted, in which case it throws an InterruptedException. */ public Object pop() throws InterruptedException { synchronized(queue) { while (queue.isEmpty()) { queue.wait(); } return queue.removeFirst(); } } /** Return the number of elements currently in the queue. */ public int size() { return queue.size(); } }堆疊要pop出東西如果沒有元素可以pop時,就要停下來(或是丟出例外),直到有元素被增加進去,才可以進行pop的動作 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |