Содержание, связанное с этой главой, включает в себя:
1. Введение в exutm ()
2. Пример доходности ()
3. Сравнение доходности () и ожидания ()
1. Введение в exutm ()
Цель доходности () - сдаться. Это позволяет текущему потоку вводить «Готовное состояние» из «работающего состояния», так что другие потоки ожидания с тем же приоритетом могут получить права на выполнение; Иметь такой же приоритет.
2. Пример доходности ()
Ниже см. Его использование по примеру.
Кода -копия выглядит следующим образом:
// helldtest.java исходный код
Class Threada Extends Thread {
public Threada (String name) {
супер (имя);
}
публичный синхронизированный void run () {
для (int i = 0; i <10; i ++) {
System.out.printf ("%s [%d]:%d/n", this.getName (), this.getPriority (), i);
// Когда я делюсь 4, вызовите доходность
if (i%4 == 0)
Thread.yield ();
}
}
}
открытый класс helivetest {
public static void main (string [] args) {
Threada T1 = new Threada ("T1");
Threada T2 = new Threada ("T2");
t1.start ();
t2.start ();
}
}
(Один раз) Результат работы:
Кода -копия выглядит следующим образом:
T1 [5]: 0
T2 [5]: 0
T1 [5]: 1
T1 [5]: 2
T1 [5]: 3
T1 [5]: 4
T1 [5]: 5
T1 [5]: 6
T1 [5]: 7
T1 [5]: 8
T1 [5]: 9
T2 [5]: 1
T2 [5]: 2
T2 [5]: 3
T2 [5]: 4
T2 [5]: 5
T2 [5]: 6
T2 [5]: 7
T2 [5]: 8
T2 [5]: 9
Результаты Описание:
Когда «потока T1» может быть целым на 4, он не переключается на «потока T2». Это показывает, что, хотя helive () может позволить потокам входить в «Готовное состояние» из «управления состоянием»; Даже если эти «другие потоки» имеют тот же приоритет, что и поток, который в настоящее время вызывает доход ().
3. Сравнение доходности () и ожидания ()
Мы знаем, что функция wait () состоит в том, чтобы позволить текущему потоку войти в состояние «wat (блокировка) из« состояния работы », а также освободить блокировку синхронизации. Функция доходности () состоит в том, чтобы сдаться, что также приведет к тому, что текущий поток покинет «управляемое состояние». Их различия:
(01) WAIT () - это позволить потоке войти в состояние «ожидание (блокировка)» из «управляемого состояния», в то время как не hield () - это позволить потоку войти в «Готовное состояние» из «управляемого состояния».
(02) WAIT () - это блокировка синхронизации, которая будет отключить объект, который он удерживает, в то время как метод hellive () не будет выпускать блокировку.
В следующем примере показано, что helipt () не выпустит блокировку.
Кода -копия выглядит следующим образом:
// hieldlocktest.java исходный код
открытый класс ingforceTest {
частный статический объект obj = new Object ();
public static void main (string [] args) {
Threada T1 = new Threada ("T1");
Threada T2 = new Threada ("T2");
t1.start ();
t2.start ();
}
Static Class Threada Extends Thread {
public Threada (String name) {
супер (имя);
}
public void run () {
// Получить блокировку синхронизации объекта OBJ
синхронизированный (obj) {
для (int i = 0; i <10; i ++) {
System.out.printf ("%s [%d]:%d/n", this.getName (), this.getPriority (), i);
// Когда я делюсь 4, вызовите доходность
if (i%4 == 0)
Thread.yield ();
}
}
}
}
}
(Один раз) Результат:
Кода -копия выглядит следующим образом:
T1 [5]: 0
T1 [5]: 1
T1 [5]: 2
T1 [5]: 3
T1 [5]: 4
T1 [5]: 5
T1 [5]: 6
T1 [5]: 7
T1 [5]: 8
T1 [5]: 9
T2 [5]: 0
T2 [5]: 1
T2 [5]: 2
T2 [5]: 3
T2 [5]: 4
T2 [5]: 5
T2 [5]: 6
T2 [5]: 7
T2 [5]: 8
T2 [5]: 9
Результаты Описание:
Две потоки T1 и T2 запускаются в основной резьбе Main. T1 и T2 будут ссылаться на блокировку синхронизации того же объекта в run (), то есть синхронизированный (OBJ). Во время операции T1, хотя он будет называть Thread.yield (); Потому что T1 не выпускает «синхронная блокировка, удерживаемая OBJ»!