我正在进行一项任务,必须创建两个类,一个代表一个人,另一个代表一个桥。任何时候只有一个人可以“穿越”这座桥,但可能有人在等待穿越
我通过多线程轻松实现了这一功能,允许多个人同时进行交叉,但是在更改它时只有一个线程可以运行时遇到问题......
我的主要问题是他们想要的类设计,我必须在person类中开始线程,但是桥类需要能够等待并通知它们启动/停止
我有什么想法可以做到这一点吗?
答案 0 :(得分:5)
您可能希望阅读wait
和notify
。有谷歌搜索的教程。
但是在你理解了一下之后,你想让人物对象调用wait
。然后,您希望桥对象调用notify
。当一个人物对象从wait
返回时,轮到他们了解(因为我理解你的问题。)当这个人越过时,桥对象会再次调用notify
。
确保synchronize
正确无误。教程应该有所帮助。
答案 1 :(得分: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
}
}
答案 2 :(得分:0)
我相信分配要求您做的是使用(或实现)互斥锁来访问共享资源,即桥接器。 http://en.wikipedia.org/wiki/Mutex
答案 3 :(得分:0)
尝试java.util.concurrent:
这个类将生成一个ExecutorService,您可以在其中提交“人员”。 Jobes排队,一个人将在时间上交叉。