2010-10-18 53 views
4

我正在完成一項任務,必須創建兩個類,一個代表一個人,另一個代表一個橋,另一個代表橋。只有一個人可以在任何時候「穿越」橋,但可能有人在等待穿越Java,多個線程,每次只執行一個線程

我很容易用多線程來實現這一點,允許多人同時跨越,但我遇到問題時改變它只允許一個線程運行...

我的主要問題是他們想要的類設計,我必須在人類中開始線程,但橋類需要能夠等待並通知他們開始/停止

任何想法我可以做到這一點?

回答

5

你可能要閱讀waitnotify 。有一些谷歌搜索教程。

但是當你理解了他們之後,你想讓這個人對象調用wait。然後你想要橋接對象調用notify。當一個人物從wait返回時,輪到他們交叉(因爲我理解你的問題)。當這個人交叉時,橋物體將再次呼叫notify

確保你的synchronize正確。教程應該有所幫助。

閱讀本題,以及:How to use wait and notify in Java?

2

鎖定這樣的對象:

// Bridge.java 

public class Bridge { 
private Object _mutex = new Object(); 

    public void cross(Person p) 
     synchronized(_mutex) { 
      // code goes here 
     }  
    } 
} 

也就是說一個,可能是最簡單,方法..

編輯:

更容易:

public class Bridge { 
    public synchronized void cross(Person p) 
    { 
     // code goes here 
    } 
} 
+0

使用同步方法似乎是最優雅的Java解決方案。提交者可以看到[「同步方法」](http://download.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html),瞭解它的全部功能。它不會教會任何人有關信號量或互斥/條件的知識,但是它是指導者自己的錯,它選擇了像Java這樣的高級技術來教會像低級別的事情,例如在多線程之間同步訪問。 – 2010-10-18 23:10:53

相關問題