Состояния потока в Java

В классе Thread объявлено внутреннее перечисление State, простейшее применение элементов которого призвано помочь в отслеживании состояний потока в процессе функционирования приложения и, как следствие, в улучшении управления им.

/* пример # 11 : состояния NEW, RUNNABLE, TIMED_WAITING, TERMINATED : ThreadTimedWaitingStateTest.java */

package chapt14;

public class ThreadTimedWaitingStateTest extends Thread {

public void run() {

try {

Thread.sleep(50);

} catch (InterruptedException e) {

System.err.print("ошибка потока");

}

}

public static void main(String [] args){

try{

Thread thread = new ThreadTimedWaitingStateTest();

// NEW – поток создан, но ещё не запущен

System.out.println("1: " + thread.getState());

thread.start();

// RUNNABLE – поток запущен

System.out.println("2: " + thread.getState());

Thread.sleep(10);

// TIMED_WAITING

// поток ждет некоторое время окончания работы другого потока

System.out.println("3: " + thread.getState());

thread.join();

// TERMINATED поток завершил выполнение

System.out.println("4: " + thread.getState());

} catch (InterruptedException e) {

System.err.print("ошибка потока");

}

}

}

В результате компиляции и запуска будет выведено:

1: NEW

2: RUNNABLE

3: TIMED_WAITING

4: TERMINATED

/* пример # 12 : состояния BLOCKED, WAITING : ThreadWaitingStateTest.java */

package chapt14;

public class ThreadWaitingStateTest extends Thread {

public void run() {

try {

synchronized (this) {

wait();

}

} catch (InterruptedException e) {

System.err.print("ошибка потока");

}

}

public static void main(String[] args) {

try {

Thread thread = new ThreadWaitingStateTest();

thread.start();

synchronized (thread) {

Thread.sleep(10);

// BLOCKED – because thread attempting to acquire a lock

System.out.println("1: " + thread.getState());

}

Thread.sleep(10);

// WAITING – метод wait() внутри synchronized

// останавил поток и освободил блокировку

System.out.println("2: " + thread.getState());

thread.interrupt();

} catch (InterruptedException e) {

System.err.print("ошибка потока");

}

}

}

В результате компиляции и запуска будет выведено:

1: BLOCKED

2: WAITING

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100