Java 为什么不调用run方法? 包线; 公共类WorkingWithThreads实现可运行{ 公共静态void main(字符串[]args){ WorkingWithThreads wwt=新的WorkingWithThreads(); } 公共工作线程(){ System.out.println(“创建线程”); 螺纹t=新螺纹(); System.out.println(“起始线程”); t、 start(); } @凌驾 公开募捐{ System.out.println(“线程运行”); 对于(int i=0;i

Java 为什么不调用run方法? 包线; 公共类WorkingWithThreads实现可运行{ 公共静态void main(字符串[]args){ WorkingWithThreads wwt=新的WorkingWithThreads(); } 公共工作线程(){ System.out.println(“创建线程”); 螺纹t=新螺纹(); System.out.println(“起始线程”); t、 start(); } @凌驾 公开募捐{ System.out.println(“线程运行”); 对于(int i=0;i,java,multithreading,runnable,Java,Multithreading,Runnable,当我运行这段代码时,它会打印创建线程和启动线程。但不打印正在运行的线程,这意味着根本不调用run函数。为什么会这样?您必须在线程上调用start(),才能启动它;e、 g package threadwork; public class WorkingWithThreads implements Runnable { public static void main(String[] args) { WorkingWithThreads wwt = new Workin

当我运行这段代码时,它会打印创建线程和启动线程。但不打印正在运行的线程,这意味着根本不调用run函数。为什么会这样?

您必须在线程上调用
start()
,才能启动它;e、 g

package threadwork;

public class WorkingWithThreads implements Runnable {

    public static void main(String[] args) {
        WorkingWithThreads wwt = new WorkingWithThreads();
    }

    public WorkingWithThreads() {
        System.out.println("Creating Thread");
        Thread t = new Thread();
        System.out.println("Starting Thread");
        t.start();
    }

    @Override
    public void run() {
        System.out.println("Thread Running");

        for (int i = 0; i < 5; i++) {
            System.out.println("Thread:" + i);
            try {
                Thread.sleep(1);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
如果您正在扩展
Thread
,您将创建一个新线程,并对其调用
start()
,如下所示:

Thread t = new Thread();
t.start();
new Thread(new WorkingWithThreads()).start();
由于您没有扩展
线程
,但您的类实现了
可运行

new MyThread().start();

如果我站在你的立场上,我会在main内部开始线程,如下所示:

Thread t = new Thread();
t.start();
new Thread(new WorkingWithThreads()).start();
将用于
使用线程工作的构造函数保留为空:

public static void main(String[] args) {
  WorkingWithThreads wwt = new WorkingWithThreads();
  System.out.println("Creating Thread");
  Thread tzero = new Thread(wwt);
  System.out.println("Starting thread");
  tzero.start();
}

一般来说,在构造函数中为
使用线程
创建
线程
不是一个好主意,因为runnable(即
使用线程
的实例)必须在传递给
线程
的实例之前完全构造好,忘了在这里写了。您需要创建扩展线程的类的实例。请参见回答中的编辑。我不是在扩展线程,而是在实现可运行接口。大体上,我已经创建了实现Runnable接口的类的实例。在实现RunnableIt时,请再次参阅我答案中的edit,但现在我有一个疑问。在创建线程之前,我将最后一段代码放在线程t=new thread()之前。现在run只被调用一次,为什么呢,我这里有两个线程,并且调用start方法两次。