La programmation simultanée en Java a toujours été l'un des sujets importants que les développeurs doivent comprendre et maîtriser en profondeur. En programmation simultanée, le contrôle de la collaboration et de la communication entre les threads est crucial, et les méthodes wait et notify sont des outils clés. Cet article approfondira les principes, l'utilisation et les exemples de code spécifiques des méthodes d'attente et de notification en Java pour aider les lecteurs à mieux comprendre ces deux méthodes importantes dans la programmation simultanée.
Les méthodes wait et notify sont deux méthodes importantes de la classe Object. Elles sont généralement utilisées pour réaliser la collaboration et la communication entre les threads. La méthode wait est utilisée pour mettre le thread actuel dans un état d'attente et libérer le verrou de l'objet, tandis que la méthode notify est utilisée pour réveiller un thread en attente. En combinant les méthodes wait et notify, la synchronisation et la collaboration entre les threads peuvent être obtenues pour garantir une exécution ordonnée entre les threads.
Tout d’abord, examinons l’utilisation et les principes de base des méthodes d’attente et de notification. Avant d'utiliser les méthodes wait et notify, vous devez d'abord obtenir le verrou de l'objet, ce qui peut être obtenu via le mot-clé synchronisé. Une fois le verrou de l'objet acquis, la méthode wait peut être appelée pour mettre le thread dans un état d'attente et le verrou de l'objet est libéré et la méthode notify peut être appelée pour réveiller un thread en attente ; Il convient de noter que les méthodes wait et notify doivent être appelées dans des blocs de code ou des méthodes synchronisés, sinon une IllegalMonitorStateException en résultera.
Maintenant, démontrons l'utilisation des méthodes d'attente et de notification à travers un exemple de code spécifique.
public class WaitNotifyExample { public static void main(String[] args) { final Object lock = new Object(); // 等待线程 Thread waitThread = new Thread(() -> { synchronized (lock) { System.out.println("等待线程开始等待..."); try { lock.wait(); // 线程进入等待状态,并释放锁 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("等待线程被唤醒"); } }); // 唤醒线程 Thread notifyThread = new Thread(() -> { synchronized (lock) { System.out.println("唤醒线程开始唤醒等待线程..."); lock.notify(); // 唤醒等待线程 } }); waitThread.start(); notifyThread.start(); } }
Dans cet exemple, nous créons un thread d'attente et un thread de réveil, qui partagent le même verrou d'objet. Dans le thread en attente, nous acquérons d'abord le verrou de l'objet, puis appelons la méthode wait pour mettre le thread en état d'attente et libérer le verrou. Dans le thread de réveil, nous obtenons également d'abord le verrouillage de l'objet, puis appelons la méthode notify pour réveiller le thread en attente. De cette façon, nous obtenons une collaboration et une communication entre les threads.
En plus des méthodes de base wait et notify, Java fournit également les méthodes wait (long timeout) et notifyAll (). wait(long timeout) peut spécifier le temps d'attente du thread, qui se réveillera automatiquement après l'heure spécifiée ; notifyAll() peut réveiller tous les threads en attente. Une utilisation flexible de ces méthodes peut mieux répondre aux différents besoins de programmation simultanée.
En bref, les méthodes wait et notify sont des outils importants pour réaliser la collaboration et la communication inter-thread en Java, et jouent un rôle important dans la programmation simultanée. En ayant une compréhension approfondie des principes et de l'utilisation de ces deux méthodes, combinée à des exemples de code spécifiques, nous pouvons mieux maîtriser les compétences de gestion des threads et de collaboration dans la programmation simultanée, et améliorer les performances et la fiabilité du programme. J'espère que cet article pourra aider les lecteurs à mieux comprendre la programmation simultanée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!