Cycle de vie Java multithreading 02-- threads et des méthodes communes, vous avez maîtrisé

Dans le dernier chapitre, nous présenterons quelques connaissances de base, la création de fil et la terminaison de fils. Cette question apportera le cycle de vie des fils et des méthodes communes vous. Je suis préoccupé par le nombre de partenariats public « côté du code Java » pour en savoir plus Java connaissances liées.

Enfilez du cycle de vie

Un fil n'est pas créé immédiatement commencé à effectuer, ni est - il a été dans l'exécution de l' Etat. Tout au long du cycle de vie du fil connaîtra New (Nouveau),
Prêt (Runnable), en cours d' exécution (Running), bloqué (bloqué) et détruire (5) Terminated états.

Fil du cycle de vie .PNG

nouveau

Il fait référence à créer un nouvel objet de fil en utilisant le nouveau mot-clé après que le fil est dans le nouvel état. A ce stade, son allocation mémoire uniquement par la machine virtuelle Java, et initialise la valeur de ses variables membres.

prêt

Lorsqu'un objet de fil pour appeler la méthode start (), le fil est à l'état prêt. La pile d'appel machine virtuelle Java et compteur de programme pour créer une méthode, en attente d'être planifiée.

course

Thread d'exécution si le fil est à l'état prêt à l'horloge du CPU, méthode run démarré (), le fil est en cours d'exécution.

galoche

Des moyens de blocage de l'Etat que le fil pour une raison quelconque pour donner le droit d'utiliser le CPU pour arrêter temporairement en cours d'exécution. Cas d'obstruction de trois catégories:

  1. blocs en attente (o.wait-> colonnes d'attente) : fil de o.wait méthode run d'exécution (exécution) (), JVM se visser dans la file d'attente (file d' attente waitting); et
  2. blocage synchrone (lock - > piscine de verrouillage) : la course de fil (marche) lors de l' acquisition objet de verrouillage de synchronisation, si le verrou de synchronisation est occupé par un autre thread, la JVM se verrouille dans la piscine de fil (piscine de blocage) dans.
  3. Autre blocage (SLEEP / la jointure) : méthode en cours d' exécution ( en cours d' exécution) l' exécution de fil Thread.sleep (longues ms) ou t.join (), ou émettre la demande d' E / S, la machine virtuelle Java définira le thread est bloqué. Lorsque le sommeil délai d' attente (), Join () attente pour un fil de mettre fin ou temporairement, ou lorsque le traitement d' E / S est terminée, le fil peut être exécuté réintégrerait (Runnable) état.

détruire

Si le fil est terminé ou après fil normale est obligatoire résiliation anticipée ou de plomb anormale à une extrémité, le fil sera détruit, la libération des ressources.

Enfilez méthode commune

A partir du fil du cycle de vie, nous avons appris un fil de méthodes couramment utilisées. fil Il existe des méthodes communes attente, informer, notifyAll, sommeil, joignez-vous, le rendement et ainsi de suite.

attendez

  • Rôle : forcé d'attendre un fil, le fil entre dans l' état wating, pour attendre un autre thread ou une notification d' interruption sera retourné;
  • Remarque : Appel de la méthode d' attente (), l'objet libérera le verrou. Ainsi, attendre un procédé généralement utilisé dans le procédé de synchronisation de code de synchronisation ou de blocs.

sommeil

  • Rôle : forcer un fil à dormir pour N millisecondes, le fil entre dans l' état de TIMED_WATING, pour attendre un autre thread ou une notification d' interruption seront renvoyés;
  • Note : attente et différentes méthodes de sommeil ne sont pas actuellement occupés de déverrouillage.

rendement

  • Rôle : le thread courant donne la tranche de temps d'exécution du processeur, tranche en compétition à nouveau pour le temps CPU avec d' autres fils;
  • Remarque : Dans des circonstances normales, un fil de priorité plus élevée a une probabilité de plus pour rivaliser obtenir avec succès la tranche de temps CPU, mais ce n'est pas absolue, et certains ne sont pas sensibles à la priorité de thread du système d'exploitation.

interrompre

  • Rôle : un fil d' interruption, son intention est de donner à ce fil un signal de notification, il aura une incidence sur un filet intérieur interruption drapeau;
  • Remarque :
  1. interruption ne change pas l'état du fil, ce fil ne sera pas forcé dans le blocage, l'état de terminaison;
  2. Si le fil est méthode état minutées de wating, puis appelez interruption () renvoie InterruptedException, de sorte que l'extrémité du fil début de l'état minutées wating;
  3. De nombreuses méthodes de InterruptedException throw (comme déclarer Thread.sleep (méthode des moulins à long)), avant de lancer une exception, indicateur d'interruption est effacé, de sorte que l'exception est levée, appelez la méthode isInterrupted () retournera false;
  4. Vous pouvez appeler la méthode thread.interrupt (), la méthode d'exécution de fil interne peut être élégant terminer le fil selon la valeur thread.isInterrupted () de.

joindre

  • Rôle : le thread courant dans l'état bloqué jusqu'à la fin d'un autre fil, le fil courant est alors bloqué par l'état à l'état prêt;
  • Les scénarios d'utilisation : le thread principal promoteur de fil, les principaux thread attend pour le statut de retour du thread enfant.
System.out.println(Thread.currentThread().getName() + "线程运行开始!");
Thread6 thread1 = new Thread6();
thread1.setName("线程 B");
thread1.join();
System.out.println("这时 thread1 执行完毕之后才能执行主线程");

informer

  • Action : notifier méthode classe Object (), un seul moniteur de réveil thread en attente sur cet objet;

    Si tous les threads sont en attente sur cet objet seront sélectionnés réveiller un fil, le choix est arbitraire, et se réveiller avant que le fil, la méthode thread appelant attente (), sont en attente sur l'écran d'un objet, jusqu'à ce que le courant fil de verrouillage pour renoncer à ce sujet, afin de continuer à être thread Eveillé, le fil sera réveillé de façon classique avec tous les autres threads actifs en compétition pour synchroniser sur l'objet. méthodes aussi notifyAll similaires (), se réveille tous les threads en attente sur ce moniteur.

Autre méthode de fil

  • isAlive () : déterminer si un fil vivant;
  • activeCountQ () : le nombre de fils dans le programme actif;
  • l'énumération () : programme de recensement de fil;
  • currentThread () : Obtenez le fil en cours;
  • isDaemon () : détermine si un filetage est un filetage démon;
  • setDaemon () : Set un fil est un fil de démon;
  • setName () : définir un nom pour le fil;
  • getPriority () : obtient la priorité du fil en cours;
  • setPriority () : définir la priorité du thread courant.
    注意:线程优先级高,被CPU调度的概率大,但不代表一定会运行,还有小概率运行优先级低的线程。

Multithreading et série Recommandé concurrency

Java multi-thread 01-- création de fil et la fin, vous aurez plusieurs façons

Je suppose que tu aimes

Origine www.cnblogs.com/weechang/p/12507989.html
conseillé
Classement