O conteúdo envolvido neste capítulo inclui:
1. Introdução ao rendimento ()
2. Exemplo de rendimento ()
3. Comparação entre rendimento () e espera ()
1. Introdução ao rendimento ()
O objetivo do rendimento () é desistir. Ele permite que o thread atual entre no "estado pronto" do "estado em execução", para que outros threads de espera com a mesma prioridade possam obter direitos de execução; Tenha a mesma prioridade.
2. Exemplo de rendimento ()
Abaixo, consulte seu uso pelo exemplo.
A cópia do código é a seguinte:
// Código -fonte de hieldtest.java
classe threada estende thread {
public threada (nome da string) {
super (nome);
}
public sincronizado void run () {
for (int i = 0; i <10; i ++) {
System.out.printf ("%s [%d]:%d/n", this.getName (), this.getPriority (), i);
// Quando eu divide 4, ligue para o rendimento
if (i%4 == 0)
Thread.yield ();
}
}
}
classe pública HIFERTEST {
public static void main (string [] args) {
Threada T1 = new Threada ("T1");
Threada T2 = new Threada ("T2");
t1.start ();
t2.start ();
}
}
(Uma vez) Resultado da operação:
A cópia do código é a seguinte:
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
Resultados Descrição:
Quando "Thread T1" pode ser inteiro por 4, ele não muda para "Thread T2". Isso mostra que, embora o rendimento () possa permitir que os threads entrem no "estado pronto" do "estado de corrida"; Mesmo que esses "outros threads" tenham a mesma prioridade que o thread atualmente chama de rendimento ().
3. Comparação entre rendimento () e espera ()
Sabemos que a função de wait () é permitir que o thread atual insira o "aguarde (bloqueando) do" estado em execução "e também solte o bloqueio de sincronização. A função do rendimento () é desistir, o que também fará com que o encadeamento atual deixe o "estado em execução". Suas diferenças são:
(01) espera () é deixar o thread entrar no "aguardar (bloquear) o estado" do "estado em execução", enquanto não o rendimento () é deixar o thread entrar no "estado pronto" do "estado em execução".
(02) espera () é um bloqueio de sincronização que será lançado o objeto que ele mantém, enquanto o método de rendimento () não liberará o bloqueio.
O exemplo a seguir mostra que o rendimento () não liberará o bloqueio.
A cópia do código é a seguinte:
// Código -fonte de hieldlocktest.java
classe pública hieldlocktest {
objeto estático privado obj = new Object ();
public static void main (string [] args) {
Threada T1 = new Threada ("T1");
Threada T2 = new Threada ("T2");
t1.start ();
t2.start ();
}
classe estática threada estende thread {
public threada (nome da string) {
super (nome);
}
public void run () {
// Obtenha a trava de sincronização do objeto OBJ
sincronizado (obj) {
for (int i = 0; i <10; i ++) {
System.out.printf ("%s [%d]:%d/n", this.getName (), this.getPriority (), i);
// Quando eu divide 4, ligue para o rendimento
if (i%4 == 0)
Thread.yield ();
}
}
}
}
}
(Uma vez) resultado:
A cópia do código é a seguinte:
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
Resultados Descrição:
Dois threads T1 e T2 são iniciados na linha principal principal. T1 e T2 se referirão à trava de sincronização do mesmo objeto em run (), isto é, sincronizado (OBJ). Durante a operação T1, apesar de ligar para Thread.yield (); Porque T1 não libera a "trava síncrona mantida por Obj"!