我正在处理一项任务,必须创建两个类,一个代表一个人,另一个代表一座桥。任何时候只有一个人可以“过”桥,但可能有人在等待过桥
我通过多线程轻松实现了这一点,允许多人同时交叉,但是在将其更改为只允许一个线程运行时遇到问题......
我的主要问题是他们想要的类设计,我必须在 person 类中启动线程,但是 bridge 类需要能够等待并通知他们启动/停止
任何想法我怎么能做到这一点?
我正在处理一项任务,必须创建两个类,一个代表一个人,另一个代表一座桥。任何时候只有一个人可以“过”桥,但可能有人在等待过桥
我通过多线程轻松实现了这一点,允许多人同时交叉,但是在将其更改为只允许一个线程运行时遇到问题......
我的主要问题是他们想要的类设计,我必须在 person 类中启动线程,但是 bridge 类需要能够等待并通知他们启动/停止
任何想法我怎么能做到这一点?
您可能想继续阅读wait
和notify
。有谷歌搜索的教程。
但是在你稍微了解它们之后,你想让 person 对象调用wait
。然后你希望桥对象调用notify
. 当一个人对象从返回时wait
,轮到他们越过(我理解你的问题。)当人越过时,桥对象会notify
再次调用。
确保你synchronize
正确。教程应该会有所帮助。
像这样锁定一个对象:
// 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
}
}
我相信任务要求你做的是使用(或实现)互斥锁来访问共享资源,也就是桥。 http://en.wikipedia.org/wiki/Mutex
试试 java.util.concurrent:
此类将生成一个 ExecutorService,您可以在其中提交您的“Persons”。而且乔布斯在排队,一个人会不时穿过。