Демонстрация многопоточности Java не работает
Я пишу небольшую программу, чтобы увидеть, как несколько потоков могут быть запущены в 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 ответа
Решение
Вы не создаете никаких экземпляров 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
для всех трех потоков, так как они фактически не используют никакого состояния.
Вы не создаете объект NuThread. Вот почему поток не запускается.
И это не лучшая идея для запуска потока в конструкторе, смотрите здесь.