Wait () et notify () sont directement affiliés à la classe d'objets, c'est-à-dire que tous les objets ont cette méthode. Il semble que ce soit très incroyable au début, mais il est en fait très naturel, car cette paire de méthodes doit libérer le verrouillage occupé lors du blocage, et le verrou est disponible dans n'importe quel objet. provoquer le blocage du fil. et le verrouillage de l'objet est libéré. La méthode Notify () d'appel n'importe quel objet provoque un bloc de blocage sélectionné au hasard dans un thread obstrué par la méthode Wait () de l'objet (mais il peut être exécuté jusqu'à ce qu'il soit verrouillé).
Deuxièmement, le Wait () et le Notify () peuvent être appelés à n'importe quelle position, mais cette paire doit être appelée dans la méthode ou le bloc synchronisé. De la même manière, le verrou de l'objet de cette paire de méthodes doit appartenir au thread actuel, afin que le verrou puisse être libéré. Par conséquent, l'appel de la méthode doit être placé dans une méthode ou un bloc aussi synchronisé. Si cette condition n'est pas remplie, bien que le programme puisse toujours être compilé, illégalonitorsstateException apparaîtra pendant l'exécution.
Les caractéristiques ci-dessus des méthodes d'attente () et de notifier () déterminent qu'elles l'utilisent souvent avec la méthode ou le bloc synchronisé. La méthode ou le bloc fournit une méthode ou un bloc fournit une méthode ou un bloc. méthodes toutes déclarent synchronisées). Leur combinaison nous permet de réaliser une série d'algorithmes inter-communication exquis (tels que des algorithmes de quantité de signal) sur le système d'exploitation et de l'utiliser pour résoudre divers problèmes complexes inter-communication.
À propos des méthodes Wait () et Notify () Expliquez enfin deux points:
Premièrement: appelez la méthode Notify () qui provoque la sélection de fil de blocage au hasard parmi le fil obstrué par la méthode Wait () qui appelle l'objet.
Deuxièmement: en plus de notifier (), il existe également une méthode notifyall () qui peut également jouer un rôle similaire. à l'objet. Bien sûr, seul le fil qui obtient le verrou peut entrer dans l'état exécutable.
Attente et notification connexes Utiliser la démo:
/ ** * <Pre> * Sous-fil du fil 10 fois, puis le cycle de thread principal 100 fois, puis revenez au cycle du sous-thread 10 fois, * puis revenez au cycle de filetage principal 100 fois, donc 50 fois * </sled> * @author ketqi * / classe publique waitNotifyDemo {public static void main (String [] args) {final business business = new business (); {pour (int i = 1; i <= 50; i ++) {Business.Sub (i);}}}). {Business.min (i);}}} Classe Business {private boolean ismainthread = true; e.printStackTrace ();}} pour (int j = 1; j <= 10; j ++) {System.out.println ("Séquence sous-thread de" + j + ", boucle de" + i); } Ismainthread = false; Int j = 1; j <= 100; j ++) {System.out.println ("séquence de threads principale de" + j + ", boucle de" + i);} ismainthread = true; }}Ce qui précède est tout le contenu de cet article.