Maison  >  Article  >  Java  >  Comment résoudre l'interruption d'un appel d'attente en Java

Comment résoudre l'interruption d'un appel d'attente en Java

WBOY
WBOYavant
2023-04-25 10:34:061239parcourir

1. Solution

(1) Lors de l'utilisation de threads Java, la méthode wait sera souvent utilisée, et si elle est interrompue lorsque la méthode wait est appelée, la jvm capturera l'interruption et continuera à appeler l'instruction wait.

(2) Même si vous utilisez la méthode d'envoi d'interruption à ce moment, aucun effet ne se produira.

(3) La méthode d'attente doit être encapsulée, intercepter l'exception, puis arrêter d'exécuter l'exception.

2. Exemple

public static void wait(Object obj) {
        boolean interrupted = true;
        while (interrupted) {
            interrupted = false;
            try {
                obj.wait();
            }
            catch (InterruptedException e) {
                interrupted = true;
            }
        }
    }
 
    public static void wait(Object obj, int timeout) {
        boolean interrupted = true;
        long startTime = System.currentTimeMillis();
        int sleepTimeout = timeout;
 
        while (interrupted) {
            interrupted = false;
            try {
                obj.wait(sleepTimeout);
            }
            catch (InterruptedException e) {
                interrupted = true;
                long now = System.currentTimeMillis();
                sleepTimeout -= now - startTime;
                startTime = now;
                if (sleepTimeout < 0) {
                    interrupted = false;
                }
            }
        }
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer