为什么这个线程代码不能打印任何东西?

时间:2017-11-29 13:29:20

标签: java multithreading

有人可以告诉我这里有什么问题吗?它不打印任何东西。

public class thread {
    public static void main(String[] args) {
    Thread mythread = new Thread();
    mythread.start();
    Thread mythread1 = new Thread();
    mythread1.start();

}
    public class mythread extends Thread{
        int i;
        public void run() {
            for(i = 0; i<10;i++)
                System.out.println(i);
        }

    }
}

3 个答案:

答案 0 :(得分:0)

  • 您的班级名称应以大写字母开头(请阅读Java naming convention)。
  • 您不应该将您的类命名为与Java类相同。
  • 您应该将自己的类命名为MyThread。 (或者更好的是,将其命名为描述性内容,例如CounterRunnable / CounterThread)
  • 实例化MyThread而不是java.lang.Thread。
  • 实现Runnable比扩展Thread更好。

编辑:和一个挑剔:StackOverflow上你的帖子上一个很好的描述性标题也不会受到伤害。你可能比“请帮忙,不行”更好。

答案 1 :(得分:0)

你应该知道:

  1. 类始终以大写字母开头(例如MyThread),后面的每个单词也都以大写字母开头(所以&#39;我的主题&#39; - &gt; class MyThread)< / p>

  2. 为您的班级命名,您可以在其中使用main&#39;因此,例如我的大学使用class Mainclass ProjectRun等。命名应始终有意义。

  3. 当您从父级实施方法时,请始终使用@Override注释(如下面的代码所示)。

  4. 这里有一些代码:

    public class Main {
    
        public static void main(String[] args) {
            Thread myThread1 = new Main.MyThread();
            myThread1.run();
            Thread myThread2 = new Main.MyThread();
            myThread2.run();
        }
    
        public static class MyThread extends Thread {
            @Override
            public void run() {
                for( int i = 0; i < 10; i ++ ) {
                    System.out.println(i);
                }
            }
        }
    }
    

答案 2 :(得分:0)

  

有人可以告诉我这里有什么问题吗?它不打印任何东西。

您的代码存在问题:您正在致电:

Thread mythread = new Thread();

相反,你应该:

Thread mythread = new mythread();

你正在分支一个没有做任何事情的线程,因为线程的默认run()方法只是一个无操作。如果您实例化并启动mythread课程,则会执行run()方法。

正如其他人所说,您还应该考虑以下改进:

  • Java类名通常大写,以区别于字段或变量名。所以你应该使用MyThread
  • 建议您的班级实施Runnable而不是扩展Thread
  • 您应该始终尝试限制变量的范围,因此请勿使用字段int i,而应使用for (int i = 0 ...

所以你的代码应该是:

Thread myThread = new Thread(new MyRunnable());
...
public class MyRunnable implements Runnable {
   public void run() {
      for (int i = 0; i < 10; i++) {
         System.out.println(i);
      }
   }
}