我正在完成一项任务,必须创建两个类,一个代表一个人,另一个代表一个桥,另一个代表桥。只有一个人可以在任何时候“穿越”桥,但可能有人在等待穿越Java,多个线程,每次只执行一个线程
我很容易用多线程来实现这一点,允许多人同时跨越,但我遇到问题时改变它只允许一个线程运行...
我的主要问题是他们想要的类设计,我必须在人类中开始线程,但桥类需要能够等待并通知他们开始/停止
任何想法我可以做到这一点?
我正在完成一项任务,必须创建两个类,一个代表一个人,另一个代表一个桥,另一个代表桥。只有一个人可以在任何时候“穿越”桥,但可能有人在等待穿越Java,多个线程,每次只执行一个线程
我很容易用多线程来实现这一点,允许多人同时跨越,但我遇到问题时改变它只允许一个线程运行...
我的主要问题是他们想要的类设计,我必须在人类中开始线程,但桥类需要能够等待并通知他们开始/停止
任何想法我可以做到这一点?
你可能要阅读wait
和notify
。有一些谷歌搜索教程。
但是当你理解了他们之后,你想让这个人对象调用wait
。然后你想要桥接对象调用notify
。当一个人物从wait
返回时,轮到他们交叉(因为我理解你的问题)。当这个人交叉时,桥物体将再次呼叫notify
。
确保你的synchronize
正确。教程应该有所帮助。
我相信作业要求你做的是使用(或实现)互斥体访问共享资源,即桥。 http://en.wikipedia.org/wiki/Mutex
锁定这样的对象:
// 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
}
}
尝试的java.util.concurrent:
该类西港岛线产生ExecutorService的,在那里你可以提交YOUT “人”。 Jobes排队,一个人会在时间交叉。
在阅读完yout后,我不确定,如果你可以将你的设计扩大到你的这个功能。 – 2010-10-28 09:34:19
使用同步方法似乎是最优雅的Java解决方案。提交者可以看到[“同步方法”](http://download.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html),了解它的全部功能。它不会教会任何人有关信号量或互斥/条件的知识,但是它是指导者自己的错,它选择了像Java这样的高级技术来教会像低级别的事情,例如在多线程之间同步访问。 – 2010-10-18 23:10:53