Java多线程演示不起作用

时间:2014-11-22 17:14:56

标签: java multithreading

我正在编写一个小程序,以了解如何在Java中运行多个线程。不知道为什么我没有得到任何输出:

class NuThread implements Runnable {
    NuThread() {
        Thread t = new Thread(this, "NuThread");
        t.start();
    }

    public void run() {
        try {
                for (int i=0; i<5; i++) {
                Thread th = Thread.currentThread();
                System.out.println(th.getName() + ": " + i);
                Thread.sleep(300);
            }
        } catch (InterruptedException e) {
            Thread th = Thread.currentThread();
            System.out.println(th.getName() + " interrupted.");
        }
    }
}

public class MultiThreadDemo {
    public static void main(String[] args) {
        NuThread t1, t2, t3;
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            System.out.println("Main interrupted.");
        }   
    }
}

2 个答案:

答案 0 :(得分:1)

您没有创建 NuThread 的对象。这就是线程没有启动的原因。

在构造函数中启动线程并不是最好的主意,请参阅here

答案 1 :(得分:1)

创建 NuThread的任何实例。这一行:

NuThread t1, t2, t3;

...只声明三个变量。它不会创建任何实例。你需要这样的东西:

NuThread t1 = new NuThread();
NuThread t2 = new NuThread();
NuThread t3 = new NuThread();

话虽如此,让一个构造函数启动一个新线程本身有点奇怪......删除它可能会更好,只有:

// TODO: Rename NuThread to something more suitable :)
NuThread runnable = new NuThread();
Thread t1 = new Thread(runnable);
Thread t2 = new Thread(runnable);
Thread t3 = new Thread(runnable);
t1.start();
t2.start();
t3.start();

请注意,对所有三个主题使用相同的Runnable是可以的,因为它们实际上并不使用任何状态。