Maison  >  Article  >  Java  >  Analyse des transitions d'état des threads Java et exemples d'opérations

Analyse des transitions d'état des threads Java et exemples d'opérations

王林
王林original
2024-02-18 21:43:07583parcourir

Analyse des transitions détat des threads Java et exemples dopérations

Comprendre les changements dans l'état des threads Java et les opérations correspondantes nécessite des exemples de code spécifiques

Dans la programmation multithread Java, les changements d'état des threads sont très importants. Comprendre les changements d'état des threads et comment les faire fonctionner nous aidera à mieux comprendre les concepts fondamentaux de la programmation multithread.

L'état du fil de discussion Java peut être divisé en 6 types : Nouveau, Exécutable, En cours d'exécution, Bloqué, En attente et Terminé. Ci-dessous, nous présenterons ces états un par un et donnerons des exemples de code correspondants.

  1. Nouvel état (New) :
    Dans le nouvel état, l'objet thread a été créé, mais sa méthode start() n'a pas encore été appelée. Dans cet état, le thread n’occupe pas de ressources CPU.
    Ce qui suit est un exemple de code pour créer un nouveau thread :
Thread thread = new Thread();
  1. État prêt (Runnable) :
    Dans l'état prêt, le thread a appelé la méthode start() et attend l'allocation des ressources pour l'exécution. Lorsqu'un thread obtient des ressources CPU, il entre dans l'état d'exécution.
    Ce qui suit est un exemple de code permettant à un thread d'entrer dans l'état prêt :
Thread thread = new Thread(() -> {
    // 执行一些任务
});

thread.start();
  1. État d'exécution (Running) :
    Dans l'état d'exécution, le thread exécute des tâches. Les threads peuvent abandonner activement des ressources CPU ou être préemptés par d'autres threads hautement prioritaires.
    Ce qui suit est un exemple de code permettant à un thread d'entrer dans l'état d'exécution :
Thread thread = new Thread(() -> {
    // 执行一些任务
});

thread.start();
  1. État bloqué (Blocked) :
    Dans l'état bloqué, le thread attend la libération d'une ressource. Lorsqu'une certaine condition est remplie, le thread entrera à nouveau dans l'état prêt.
    Ce qui suit est un exemple de code permettant à un thread d'entrer dans l'état de blocage :
Object lock = new Object();

Thread thread1 = new Thread(() -> {
    synchronized (lock) {
        try {
            lock.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
});

Thread thread2 = new Thread(() -> {
    synchronized (lock) {
        lock.notify();
    }
});

thread1.start();
thread2.start();

Dans le code ci-dessus, le thread thread1 appelle la méthode lock.wait() pour entrer dans l'état de blocage jusqu'à ce que le thread thread2 appelle lock.notify () méthode pour le réveiller.

  1. En attente :
    Dans l'état d'attente, le fil attend qu'une certaine condition soit satisfaite. Contrairement à l’état de blocage, les threads en état d’attente nécessitent que les autres threads se réveillent.
    Ce qui suit est un exemple de code permettant à un thread d'entrer dans l'état d'attente :
Object lock = new Object();

Thread thread1 = new Thread(() -> {
    synchronized (lock) {
        try {
            lock.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
});

Thread thread2 = new Thread(() -> {
    synchronized (lock) {
        lock.notify();
    }
});

thread1.start();
thread2.start();

Dans le code ci-dessus, le thread thread1 appelle la méthode lock.wait() pour entrer dans l'état d'attente jusqu'à ce que le thread thread2 appelle le lock.notify () méthode pour le réveiller.

  1. État terminé (Terended) :
    Dans l'état terminé, le thread a terminé la tâche ou s'est terminé en raison d'une exception. Un thread dans un état terminé ne peut pas revenir à un autre état.
    Ce qui suit est un exemple de code permettant à un thread d'entrer dans l'état terminé :
Thread thread = new Thread(() -> {
    // 执行一些任务
});

thread.start();

// 等待线程执行完毕
thread.join();

Dans le code ci-dessus, en appelant la méthode thread.join(), le thread principal attendra que le thread du thread termine la tâche avant de continuer. courir.

En résumé, comprendre les changements dans l'état des threads Java et les opérations correspondantes est crucial pour la programmation multithread. Grâce à des exemples de code, nous pouvons comprendre plus intuitivement les caractéristiques de chaque état de thread et comment effectuer des opérations de transition d'état.

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn