多线程问题

请教各位。本人在尝试写一个银行调度系统。但是多线程上遇到问题。目前有三个并发线程,但是同时只能运行两个线程,这是何解?!!!
代码如下:
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 al = new ArrayList();

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);
    }
}

}

第一次看到override start方法的状况~~

线程是用Thread.start()(该方法是一个本地方法)方法开启的,你把start给覆盖了,谁帮你开启线程?

你应该覆盖的是run()方法

为什么只有两线程?首先确定window1和window2不会创建任何线程,他们都是在main的线程中由main来执行的一个调用方法

所以个人判断,另一个线程应该是NumberMashine(但没看到确切的代码)

代码水平不敢恭维 细节问题就不说了

你为啥每个线程都要写一个类?

线程哪有重写start()的

你就分别实例了两个线程类 怎么会出现第三个并发

你的NumberMashine类是哪个 这里没有

推荐你还是仔细学学线程吧 你这个问题离要求太远 没法解答