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 |