请教各位。本人在尝试写一个银行调度系统。但是多线程上遇到问题。目前有三个并发线程,但是同时只能运行两个线程,这是何解?!!!
代码如下:
public class Number 
{
private long number = 0;
private long max = 0;
private String type = null;

public Number()
{
}

public Number(long number, String type, long max)
{
this.number=number;
this.type=type;
this.max=max;
} public long getNumber() {
return number;
} public void setNumber(long number) {
this.number = number;
} public String getType() {
return type;
} public void setType(String type) {
this.type = type;
} public long getMax() {
return max;
} public void setMax(long max) {
this.max = max;
}


}import java.util.ArrayList;public class Main {
public static ArrayList<Number> al = new ArrayList<Number>();

public static void main(String[] args) throws InterruptedException 
{

NumberMashine number = new NumberMashine();
number.start();
Thread.sleep(5000);
Thread window1= new Window1();
Thread window2= new Window2();
window1.start();
window2.start();

}
}public class ManagerNumber 
{
public static long getNumber(int window)
{
long num = Main.al.get(0).getNumber();
if(window==5)
{
for(int i=0;i<Main.al.size();i++)
{
if(Main.al.get(i).getType().equals("EXPRESS"))
num = Main.al.get(i).getNumber();
}
}
else if(window==6)
{
for(int i=0;i<Main.al.size();i++)
{
if(Main.al.get(i).getType().equals("VIP"))
num = Main.al.get(i).getNumber();
}
}

return num;
}

public static void removeNumber(long number)
{
for(int i=0;i<Main.al.size();i++)
{
if(number==Main.al.get(i).getNumber())
Main.al.remove(i);
}
          }
}import java.util.Random;public class Window1 extends Thread 
{
private long num = 0;
private long useTime = 0;

public Window1()
{
} @Override
public synchronized void start() 
{
while(true)
{
System.out.println("1号窗口等待中");
num = ManagerNumber.getNumber(1);
System.out.println("请"+num+"号客户到1号窗口办理业务");
useTime = new Random().nextInt(7);
System.out.println(useTime);
try {
Thread.sleep(useTime*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(num+"号总共用时"+useTime*1000+"秒");
ManagerNumber.removeNumber(num);
}
}
}import java.util.Random;public class Window2 extends Thread 
{
private long num = 0;
private long useTime = 0;

public Window2()
{
} @Override
public synchronized void start() 
{
while(true)
{
System.out.println("2号窗口等待中");
num = ManagerNumber.getNumber(2);
System.out.println("请"+num+"号客户到2号窗口办理业务");
useTime = new Random().nextInt(7);
try {
Thread.sleep(useTime*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(num+"号总共用时"+useTime*1000+"秒");
ManagerNumber.removeNumber(num);
}
}
}