2010-10-18 242 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

相关问题