黑马程序员技术交流社区

标题: 多线程程序运行问题 [打印本页]

作者: 董月峰    时间: 2014-1-8 10:21
标题: 多线程程序运行问题
/*
* 练习:
* 创建两个线程,和主线程交替运行。
*/
//首先我自己写了一个,发现只运行main函数,不运行Test1,2类。菜13楼主因为一直用eclipse,所以以为是这个原因,但是用cmd运
//行之后结果还是这样,只运行主函数。但是cmd运行后文件里面多了个Test1.class文件只是 dos里面没显示,求解为啥
class Test1 extends Thread
{
        private String name;
        Test1(String name)
        {
                this.name=name;
        }
        public void run1()
        {
                for(int i=1;i<33;i++)
                        System.out.println(name+"run----1"+i);
        }
}
/*
class Test2 extends Thread
{
        public void run2()
        {
                for(int i=1;i<33;i++)
                        System.out.println("run-----2"+i);
        }
}
*/
class ThreadTest
{
        public static void main(String[] args)
        {
                Test1 t1=new Test1("1-1");
                t1.start();
                Test1 t2=new Test1("2-2");
                t2.start();
                for(int i=1;i<33;i++)
                        System.out.println("run-----main"+i);
        }
}

Dos线程.jpg (76.29 KB, 下载次数: 57)

Dos线程.jpg

作者: 汪洋大海    时间: 2014-1-8 10:24
run1改成run
作者: 零敢    时间: 2014-1-8 10:40
  1. class Test1 extends Thread
  2. {
  3.         private String name;
  4.         Test1(String name)
  5.         {
  6.                 this.name=name;
  7.         }
  8.         public void run()//复写方法不能改方法名
  9.         {
  10.                 for(int i=1;i<33;i++)
  11.                         System.out.println(name+"run----1"+i);
  12.         }
  13. }
  14. /*
  15. class Test2 extends Thread
  16. {
  17.         public void run()//复写run方法不能改人家的名字改了就无法复写
  18.         {
  19.                 for(int i=1;i<33;i++)
  20.                         System.out.println("run-----2"+i);
  21.         }
  22. }
  23. */
  24. class ThreadTest
  25. {
  26.         public static void main(String[] args)
  27.         {
  28.                 Test1 t1=new Test1("1-1");
  29.                 t1.start();
  30.                 Test1 t2=new Test1("2-2");
  31.                 t2.start();
  32.                 for(int i=1;i<33;i++)
  33.                         System.out.println("run-----main"+i);
  34.         }
  35. }
复制代码

代码都帮你改好了 你运行试试,
主要是你复写方法的时候名字不能改掉人家的 不然就不叫复写方法了 是创建一个新方法了
懂?
作者: IT人    时间: 2014-1-8 14:14
错误太明显了,一般线程的创建有两种方式:
继承方式:
class MyThread extends Thread
{
public void run(){
复写run()方法
}
}
public static void main(String[] args){
new Thread().start();
}

还有一种是实现Runnable接口

class MyRunnable implements Runnable
{
//重写run方法
public void run(){}
}


public static void main(String[] args){
new Thread(new MyRunnable()).start();
}

你的复写run方法不能改名,你要是想区别打印结果明白,你可以在方法体内写区分的代码
希望对你有帮助
作者: @翱翔@    时间: 2014-1-8 14:54
因为java只支持单继承,不支持多继承,如果多继承就会出现调用不明的现象就是你这种情况,因此我建议你使用线程的第二种方法implements Runnable接口这种方法就不会出现这种情况了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2