Иллюстрированный самоучитель по Java

Класс Thread

В классе Thread семь конструкторов:

  • Thread(ThreadGroup group, Runnabie target, String name) – создает подпроцесс с именем name, принадлежащий группе group и выполняющий метод run () объекта target. Это основной конструктор, все остальные обращаются к нему с тем или иным параметром, равным null;
  • Thread () – создаваемый подпроцесс будет выполнять свой метод run ();
  • Thread(Runnabie target);
  • Thread(Runnabie target, String name);
  • Thread(String name);
  • Thread(ThreadGroup group, Runnabie target);
  • Thread(ThreadGroup group, String name).

Имя подпроцесса name не имеет никакого значения, оно не используется, виртуальной машиной Java и применяется только для различения подпроцессов в программе.

После создания подпроцесса его надо запустить методом start (). Виртуальная машина Java начнет выполнять метод run () этого объекта-подпроцесса.

Подпроцесс завершит работу после выполнения метода run (). Для уничтожения объекта-подпроцесса вслед за этим он должен присвоить значение null.

Выполняющийся подпроцесс можно приостановить статическим методом sleep (long ms) на ms миллисекунд. Этот метод мы уже использовали в предыдущих главах. Если вычислительная система может отсчитывать наносекунды, то можно приостановить подпроцесс с точностью до наносекунд методом sleep(long ms, int nanosec).

В листинге 17.1 приведен простейший пример. Главный подпроцесс создает два подпроцесса с именами Thread 1 и Thread 2, выполняющих один и тот же метод run (). Этот метод просто выводит 20 раз текст на экран, а затем сообщает о своем завершении.

Листинг 17.1. Два подпроцесса, запущенных из главного подпроцесса.

class OutThread extends Thread{
private String msg;
OutThread(String s, String name){
super(name); msg = s;
}
public void run()
{
for(int i = 0; i < 20; i++){
// try{
// Thread.sleep(100);
// }catch(InterruptedException ie){}
System.out.print(msg + " ");
}
System.out.println("End of " + getName());
}
} class TwoThreads{
public static void main(String[] args){
new OutThread("HIP", "Thread 1").start();
new OutThread("hop", "Thread 2").start();
System.out.println();
}
}

На рис. 17.1 показан результат двух запусков программы листинга 17.1. Как видите, в первом случае подпроцесс Thread 1 успел отработать полностью до переключения процессора на выполнение второго подпроцесса. Во втором случае работа подпроцесса Thread 1 была прервана, процессор переключился на выполнение подпроцесса Thread 2, успел выполнить его полностью, а затем переключился обратно на выполнение подпроцесса Thread 1 и завершил его.

Иллюстрированный самоучитель по Java › Подпроцессы › Класс Thread
Рис. 17.1. Два подпроцесса работают без задержки

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.