请教大家一下。
就是:
public class Main {

public static void main(String[] args)
{
test1 t1 = new test1();
t1.start();
                /**
                 *   A
                 *   t1.start();
                 *   t1.start();
                 */
test3 t3 = new test3();
new Thread(t3).start();
                /**   
                 *   B
                 *   new Thread(t3).start();
                 *   new Thread(t3).start();
                 */
}
}
public class test1 extends Thread{ public void run()
{
for(int i=0;i<1000;i++)
System.out.println("Thread test1 "+i+"  "+Thread.currentThread().getName());
}
}
public class test3 implements Runnable{
public void run() {
for(int i=0;i<1000;i++)
System.out.println("Thread test3 "+i+"  "+Thread.currentThread().getName());

}}
就是为什么用A的时候会出现错误,具体的错误是结果中不会出现test3的进程,而用B的时候不会出现错误,是不是从thread继承的类不能这样一次调用多个。
第一次发帖没有分数请见谅。

解决方案 »

  1.   

    首先声明一下,你的程序一般的编译不会出错,但如果你加断言的话,程序在编译时就会出错。程序在运行时是报出异常的。你如果在cmd下运行,由于你循环的次数太多,cmd下看不到,(这个异常出现了但它没终止程序)异常为不合法的线程启动异常。至于为什么。我作出解释,t1是一个test1的对象(线程)。t1.start()已经启动了这个线程。而后你又用t1调用start()。在运行时抛出异常。如果你在声明一个对象,用另一个对象调用start() 就不会有错了。 为什么B的情况对。因为new Thread(t3).start(); 这样声明的对象是一个没有名字的对象。你申明了三次。实际上是三个线程分别调用start()。如果你这样定义 Tread T = new Thread(t3); 再用T连续调用start(),程序也会抛出异常。记好。test1是一个线程的子类。test3 不是一个线程类,它与线程无关。 new Thread(t3)这才是一个线程。
      

  2.   

    额我刚试了试,
    test3 t3 = new test3();
    Thread t4 = new Thread(t3);
    t4.start();
    t4.start();
    t4.start();
    这样是可以的,不会有错误的,就是说实现了runnable的接口是不会错的,只是从thread继承的才会出错,请问大家是继承thread类的问题么?