java同时运行线程

时间:2013-12-28 14:00:02

标签: java multithreading

我在电梯模拟器上工作,我必须模拟建筑物中4部电梯的工作。好吧,起初我认为它很容易,4个线程,一切都很好。但我遇到了麻烦,因为我的线程不能同时运行,即使有无限循环,一次只运行一个线程。

@Override
public void run() {


    while (true)
    {
    int i = rand.nextInt(p1.getNFloors());
    building.getFloors().get(i).putPersons();
    System.out.println(building.toString());

     try {
          Thread.sleep(1000);
        } catch (InterruptedException ex) {
            Logger.getLogger(Relogio.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

并在一个单独的主题上:

@Override
public void run() {
    while (true)
    {

    for (int i = 0; i < building.getFloors().size(); i++)
    {

        if (building.getFloors().get(i).getPersons().size() != 0)
        {
            building.getFloors().get(i).callElevator();  //this should call 1 elevator
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(Thread1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}
}

我运行了这个线程的4个实例(因此我有4个电梯)

问题是:一次只运行1个线程,因此一次只能运行1个线程。

顺便说一下,callElevator方法从一个arrayList获取电梯,我有4个电梯存储。需要满足的条件是如果电梯停止,他就可以被召唤。

我开始线程的方式:

第一个线程(将人放在楼层中的线程):thread.start(); 然后,我初始化调用电梯的4个线程实例。

所以它看起来像这样:

Simulator s1 = new Simulator();
ElevatorThread et1 = new ElevatorThread();
ElevatorThread et2 = new ElevatorThread();
ElevatorThread et3 = new ElevatorThread();
ElevatorThread et4 = new ElevatorThread();
s1.start(); 
et1.start();
et2.start();
et3.start();
et4.start();

两个线程都扩展了Thread。 任何提示?

0 个答案:

没有答案