Java,多个线程,一次只执行一个

时间:2010-10-18 22:26:07

标签: java multithreading critical-section

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

我通过多线程轻松实现了这一功能,允许多个人同时进行交叉,但是在更改它时只有一个线程可以运行时遇到问题......

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

我有什么想法可以做到这一点吗?

4 个答案:

答案 0 :(得分:5)

您可能希望阅读waitnotify。有谷歌搜索的教程。

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

确保synchronize正确无误。教程应该有所帮助。

也请阅读此问题:How to use wait and notify in Java?

答案 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:

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

这个类将生成一个ExecutorService,您可以在其中提交“人员”。 Jobes排队,一个人将在时间上交叉。