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

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

4

2 回答 2

2

您必须调用start()线程才能启动它;例如

Thread t = new Thread();
t.start();

如果您正在扩展Thread,您将创建一个新线程并start()像这样调用它:

new MyThread().start();

由于您没有扩展Thread,但您的类实现了Runnable

new Thread(new WorkingWithThreads()).start();
于 2011-04-17T05:36:29.063 回答
0

如果我站在你的立场上,我会在 main 中启动线程,如下所示:

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

将构造函数WorkingWithThreads留空:

public WorkingWithThreads() {
  System.out.println("Creating Runnable");
}

一般来说,为Thread的构造函数创建内部不是一个好主意WorkingWithThreads,因为在将可运行对象(即 的实例)传递给 的实例之前WorkingWithThreads,必须完全构造它。Thread

于 2011-04-17T05:49:28.120 回答