Приостановка, возобновление и останов потоков в Java 1.1 и более ранних версиях

До версии Java 2 программы использовали suspend () и resume (), которые были методами, определенными в Thread для приостановки и возобновления потоков. Они имеют следующую форму:

final void suspend()
final void resume()

В следующей программе демонстрируется применение этих методов:

// Использование suspend() и resume().
class NewThread implements Runnable {
String name; // имя потока
Thread t;
NewThread(String threadname) {
name = threadname;
t = new Thread(this, name);
System.out.println("Новый поток: " + t) ;
t.startO; // запуск потока
}
// Точка входа потока.
public void run () {
try {
for(int i = 15; i > 0; i—) {
System.out.println(name + ": " + i) ;
Thread.sleep(200) ;
}
}
catch (InterruptedException e) {
System.out.println(name + " прерван.");
}
System.out.println(name + " завершен.");
}
}
class SuspendResume {
public static void main(String args[]) {
NewThread obi = new NewThread("Один");
NewThread ob2 = new NewThread("Два");
try {
Thread.sleep(1000) ;
obi.t.suspend();
System.out.println("Приостановка потока Один");
Thread.sleep(1000) ;
obi.t.resume{);
System.out.println("Возобновление потока Один");
ob2.t.suspend();
System.out.println("Приостановка потока Два");
Thread.sleep(1000);
ob2.t.resume();
System.out.println("Возобновление потока Два");
}
catch (InterruptedException e) {
System.out.println("Главный поток прерван");
}
// Ожидание завершения потоков try {
System.out.println("Ожидание завершения потоков.");
obl.t.join();
ob2.t.join();
}
catch {
InterruptedException e) {
System.out.println("Главный поток прерван");
}
System.out.println("Главный поток завершен.");
}
}

Пример вывода этой программы показан ниже (в вашем конкретном случае он может отличаться, в зависимости от скорости и загрузки процессора).

Новый поток: Thread[OanH,5,main]
Один: 15
Новый поток: Thread[flBa,5,main]
Два: 15
Один: 14
Два: 14
Один: 13
Два: 13
Один: 12
Два: 12
Один: 11
Два: 11
Приостановка потока Один
Два: 10
Два: 9
Два: 8
Два: 7
Два: 6
Возобновление потока Один
Приостановка потока Два
Один: 10
Один: 9
Один: 8
Один: 7
Один: 6
Возобновление потока Two
Ожидание завершения потоков.
Два: 5
Один: 5
Два: 4
Один: 4
Два: 3
Один: 3
Два: 2
Один: 2
Два: 1
Один: 1
Два завершен.
Один завершен.
Главный поток завершен.

Класс Thread также определяет метод stop (), который останавливает поток. Его сигнатура такова:

final void stop()

Остановленный поток уже не может быть возобновлен с помощью resume ().




Rambler's Top100