java同时运行线程

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

我在做一个电梯模拟器,我要模拟一栋楼里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);
            }
        }
    }
}
}
两个线程都扩展线程。
有什么建议吗?

您如何确定一次只有一个在运行?您如何知道只有一个在运行?如何启动线程?我们需要更多的信息…我不确定我们这里是否有足够的信息来了解如何仅从一条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();