Maison > Questions et réponses > le corps du texte
public class Thread04 {
final Object object = new Object();
Runnable rb4 = new Runnable() {
public void run(){
synchronized (object){
System.out.println("T1 start!");
try {
object.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
object.notify();
System.out.println("T1 end!");
}
}
};
Runnable rb5 = new Runnable() {
public void run(){
synchronized (object){
System.out.println("T2 start!");
object.notify();
System.out.println("T2 end!");
}
}
};
public static void main(String[] args) {
Thread04 th = new Thread04();
new Thread(th.rb4).start();
new Thread(th.rb5).start();
}
}
PHP中文网2017-04-18 10:55:24
object.notify(); de rb5 est appelé lorsque rb4 n'est pas entré dans l'état d'attente car il attend toujours le verrou. Le démarrage du thread ne signifie pas qu'il exécutera () tout seul immédiatement, ce qui signifie que le run () du thread qui démarre () après lui sera probablement exécuté en premier.
迷茫2017-04-18 10:55:24
rb4
obtient le verrou d'objet de object
pendant le fonctionnement, génère T1 start!
, puis appelle wait()
Cette méthode provoquera le blocage de rb4
, libérera le verrou et bloquera en même temps. A ce moment rb5
obtient le verrou et sort T2 start!
. Appelez ensuite object.notify();
Bien que rb4
soit destiné à s'exécuter, le verrou de rb5
n'a pas été libéré, donc rb4
est toujours bloqué. rb5
Continuer l'exécution et la sortie T2 end!
. rb5
L'opération est terminée, le verrou est libéré, rb4
L'opération sortT1 end!
.