Ваша программа не создает никаких тем. Причина, по которой ваш метод run () печатает один и тот же идентификатор четыре раза, заключается в том, что вы вызываете его из одного и того же потока - основного потока - четыре раза. Единственный способ создать новый поток в Java - это если некоторый код (либо ваш собственный код, либо код в библиотеке, который вызывается вашим кодом) вызывает метод start () экземпляра Thread.
Вы не показали полное объявление класса, содержащего метод run()
. Я собираюсь притвориться, что это выглядит так:
class MyThread implements Runnable {
public void run() {
...
}
}
Самый простой способ * вызвать метод run()
, вызываемый новым потоком, - создать экземпляр MyThread
и сделать его делегат экземпляра java.lang.Thread
:
MyThread my_thread = new MyThread();
Thread t = new Thread(my_thread);
t.start();
Вызов t.start()
- это то, что создает фактический поток операционной системы.
Примечание. Поскольку MyThread
экземпляры на самом деле не являются потоками, лучшим именем может быть MyRunnable
или любое имя, не содержащее "thread".
* Создание нового потока является серьезным затея. Если бы вы писали код для крупномасштабного программного проекта, ваши коллеги, вероятно, отговаривали бы вас от непосредственного создания экземпляров и start()
новых Thread
объектов. Возможно, вместо этого они попросят вас использовать пул потоков или фабрику потоков , предоставленную вашему коду другой частью системы.
Этот прием, который потенциально даст им лучшую возможность наблюдать и / или управлять потоками системы, является еще одним примером делегирования . Делегирование - это мощная техника, используемая в объектно-ориентированном программировании, которую стоит изучить.