java同时运行线程
我在做一个电梯模拟器,我要模拟一栋楼里4部电梯的工作。嗯,起初我认为这很简单,4个线程,而且都很好。但是我遇到了麻烦,因为我的线程不会同时运行,即使是无限循环,一次也只能运行一个线程java同时运行线程,java,multithreading,Java,Multithreading,我在做一个电梯模拟器,我要模拟一栋楼里4部电梯的工作。嗯,起初我认为这很简单,4个线程,而且都很好。但是我遇到了麻烦,因为我的线程不会同时运行,即使是无限循环,一次也只能运行一个线程 @Override public void run() { while (true) { int i = rand.nextInt(p1.getNFloors()); building.getFloors().get(i).putPersons(); System.out
@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);
}
}
}
}
}
两个线程都扩展线程。
有什么建议吗?您如何确定一次只有一个在运行?您如何知道只有一个在运行?如何启动线程?我们需要更多的信息…我不确定我们这里是否有足够的信息来了解如何仅从一条println语句中确定这一点。我建议构建一个演示问题的程序。如果您的问题是程序。。。等待第一个电梯的操作结束,然后调用另一个电梯,您可以发布callElevator方法吗?也许callElevator有问题?每秒产生一个人..并且每个线程每秒也消耗一个人。为什么应该有多个区域线程处于活动状态?尝试将模拟器中的睡眠时间减少到100ms
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();