我在电梯模拟器上工作,我必须模拟建筑物中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。 任何提示?