4

我正在处理一项任务,必须创建两个类,一个代表一个人,另一个代表一座桥。任何时候只有一个人可以“过”桥,但可能有人在等待过桥

我通过多线程轻松实现了这一点,允许多人同时交叉,但是在将其更改为只允许一个线程运行时遇到问题......

我的主要问题是他们想要的类设计,我必须在 person 类中启动线程,但是 bridge 类需要能够等待并通知他们启动/停止

任何想法我怎么能做到这一点?

4

4 回答 4

5

您可能想继续阅读waitnotify。有谷歌搜索的教程。

但是在你稍微了解它们之后,你想让 person 对象调用wait。然后你希望桥对象调用notify. 当一个人对象从返回时wait,轮到他们越过(我理解你的问题。)当人越过时,桥对象会notify再次调用。

确保你synchronize正确。教程应该会有所帮助。

阅读这个问题:How to use wait and notify in Java?

于 2010-10-18T22:31:57.087 回答
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
    }
}
于 2010-10-18T22:31:27.860 回答
0

我相信任务要求你做的是使用(或实现)互斥锁来访问共享资源,也就是桥。 http://en.wikipedia.org/wiki/Mutex

于 2010-10-18T22:31:05.753 回答
0

试试 java.util.concurrent:

http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Executors.html#newSingleThreadExecutor%28%29

此类将生成一个 ExecutorService,您可以在其中提交您的“Persons”。而且乔布斯在排队,一个人会不时穿过。

于 2010-10-28T09:33:00.363 回答