Sobes.tech
Middle

Quelle est la différence entre les méthodes interrupted() et isInterrupted() en Java?

sobes.tech IA

Réponse de l'IA

isInterrupted() vérifie si le thread actuel a le drapeau d'interruption de défini, sans le réinitialiser.

interrupted() vérifie si le thread actuel a le drapeau d'interruption de défini, et le réinitialise après vérification, s'il était défini. Cette méthode est static.

Exemple:

// Créer un thread
Thread t = new Thread(() -> {
    while (!Thread.currentThread().isInterrupted()) {
        // Effectuer un travail utile
    }
    System.out.println("Thread interrompu.");
});

// Démarrer le thread
t.start();

// Interrompre le thread
t.interrupt();

// Vérifier l'état du drapeau après interrupt() avec isInterrupted()
System.out.println("isInterrupted() après interrupt(): " + t.isInterrupted()); // Devrait être true

try {
    // Attendre la fin du thread (qui se terminera rapidement dans ce cas)
    t.join();
} catch (InterruptedException e) {
    // Restaurer le drapeau d'interruption si join() a été interrompu
    Thread.currentThread().interrupt();
}

// Vérifier l'état du drapeau après interrupt() avec interrupted() (depuis un autre thread!)
// Attention : appeler interrupted() depuis un autre thread n'a pas de sens,
// car interrupted() travaille avec le drapeau du thread qui l'appelle.
// Pour démonstration, il faut l'appeler depuis le thread interrompu lui-même.

// Exemple d'appel à interrupted() dans un autre thread (pas lié au thread t)
System.out.println("interrupted() depuis le thread actuel: " + Thread.interrupted()); // Devrait être false (si le thread actuel n'a pas été interrompu)

Différence clé:

Méthode Le drapeau d'interruption est-il réinitialisé ? Type de méthode
isInterrupted() Non Instance
interrupted() Oui Statique