java BASIC (thread)

annuaire

1. Concept

2. Enfiler la réalisation

4. Enfilez État

La simultanéité et la synchronisation

6. communication



Tout d'abord, le concept

1, procédé: A correspond à un processus de programme. Un processus peut avoir plusieurs threads.

2. Discussion: est un chemin d'exécution indépendant. Il est un flux d'exécution du programme. CPU comme le corps principal. java dans le fil est une unité centrale de traitement virtuelle, le code et les données. Code et les données sont indépendantes les unes des autres. code de comportement et le corps de données constitue un fil, le fil est déterminée par le corps de fil. Lorsque vous créez un thread CPU virtuel est automatiquement encapsulé dans l'instance de la classe Thread.

3, le programme est en marche, même s'il n'a pas créé un fil, l'arrière-plan aura plusieurs threads.

4, main () thread principal. Un orifice d'entrée pour le programme.

5, ordonnancement des threads par le planificateur, l'ordre est pas considéré comme une intervention.

6, priorité du fil: la définition des priorités. Niveau doit être compris entre 1 et 10. Et l'ordre de priorité d'exécution ne représente pas

7, threads démon (démon): JVM pas besoin d'attendre l'exécution du thread démon, setDaemon (true) converti en un démon

8, Deadlock: plusieurs threads occupent des ressources partagées, mutuelle non clarifiés. En attendant l'autre. Provoquer une impasse.

9, l'ordonnancement des threads: une pluralité de threads exécutés dans un certain ordre sur un seul processeur.

En second lieu, trois méthodes pour créer un fil

  1. Fil interfaces héritées, méthode run de forçage ()

Les étapes de base: l'héritage de l'interface utilisateur, remplacer la méthode de fonctionnement, pour créer un objet de fil, en utilisant la start () de fil ouvert.

Remarque:

  • fil d'exécution doit appeler la méthode start () ne peut être ajouté au planificateur.
  • Rejoignez le planificateur ne peut pas être exécuté immédiatement, en attendant l'exécution du planificateur d'allocation
  • Si l'appel direct à la méthode run (). À ne pas ouvrir plusieurs threads. Il appelle la méthode ordinaire.
    Exemples: 1 a été ajoutée à l' aide d' un fil de programme d'exécution 100
public class text extends Thread{//继承Thread
    @Override
    public void run() {    //重写run()方法
        super.run();
        int num = 1;
        
        for(int i = 2; i <= 100; i++) {
            num += i;
        }
        System.out.println("1+2+3+.....+100="+num);
    }
    public static void main(String[] args){
        text tt = new text();//创建线程对象
        tt.start();    //开启线程
    }}

  1. Atteindre Runnable
    besoin de créer un objet thread, l'objet cible, puis démarrez le fil.
    Avantages: Évitez les limites de l' héritage unique. Utiliser l ' interface. Partage facile.
    Exemples: 1 à 100 est calculée en utilisant Exécutable
public class text implements Runnable{//实现Runnable
    @Override
    public void run() {    //重写run()方法
        int num = 1;
        for(int i = 2; i <= 100; i++) {
            num += i;
        }
        System.out.println("1+2+3+.....+100="+num);
    }
    public static void main(String[] args){ 
        text tt = new text();//创建目标对象
        Thread th = new Thread(tt);//创建线程对象。
        th.start();//开启线程
        //如果是使用一次。可以使用匿名写法。
        //new Thread(tt).start();
    }
}

  1. Appelables réaliser 
    les étapes nécessaires: Création d' un objet cible, la création de services de mise en œuvre, soumis à l'exécutif, d' obtenir des résultats, fermer le service
    vont généralement au travail après une période de temps, il peut utiliser pour.
public class text implements Callable{//实现Callable
    @Override
    public Object call() throws Exception {//重写call()
        int num = 1;
        for(int i = 2; i <= 100; i++) {
            num += i;
        }
        System.out.println("1+2+3+.....+100="+num);
        return true;
    }
    
    public static void main(String[] args) throws 
    InterruptedException, ExecutionException{
        //(1)创建目标对象
        text tt = new text();
        //(2)创建执行服务
        ExecutorService es = Executors.newFixedThreadPool(1);
        //(3)执行服务
        Future<Boolean> submit = es.submit(tt);
        //(4)获取结果
        boolean object = submit.get();
        //(5)关闭服务
        es.shutdownNow();   
    }
}

Retour en haut de page

Quatrièmement, l'état de fil

Insérer ici l'image Description(1) se traduit par un fil de mode de transition d'état prêt:
     début d'appel (), déblocage, appelant yield (), le fil de commutation JVM elle - même.
(2) méthode aboutit à bloquer les transitions d'état: le
     sommeil d'appel (), attente (), Join (), IO dans la lecture (), écriture ()

Plusieurs méthodes:
CurrentThread: Renvoie le thread en cours.
isAlive: pour déterminer si le thread courant en vie.
suspendre: suspendre fil. Si vous voulez restaurer ce fil, d' autres threads doivent appeler le resume Reprend le fil en cours.

(3) un procédé de transition d'état d'un fil

  1. Discussion de l' arrêt ( en utilisant booléenne)
    le JDK fourni par l'arrêt (), détruire () a été abandonné le jdk. Alors , faites cela ,
    vous pouvez définir une valeur booléenne. Être mis en marche et les fils d'arrêt.

  2. Enfilez suspension (sommeil)
    peuvent utiliser le sommeil (temps), réglez le temps de sommeil, pour mettre en pause un effet de fil.
    Le temps est le nombre de millisecondes. De plus, le sommeil ne sera pas libérer le verrou.

  3. Fil courtoisie (rendement)
    fil de courtoisie est le fil courant en suspension. Au lieu de bloquer le thread courant dans l'état prêt de fonctionner. Laissez un nouvel échéancier cpu.

  4. Enfilez la file d' attente sauter (Rejoindre)
    pour sauter la file d' attente, le thread est bloqué en cours d' exécution. En attendant de sauter l'exécution du thread de la file d' attente est terminée. Dans d' autres threads pour exécuter. Il est un état de blocage.

  5. interruption
    Si un thread est bloqué dans la cellule en utilisant la méthode d' interruption permettra le fil d' interruption état est effacé. Et le fil recevra exception InterruptExcaption.

Retour en haut de page

En cinquième lieu, la simultanéité et la synchronisation

  1. Parallélisme: fonctionnement simultané sont les mêmes fils de plusieurs objets.
  2. Sync: un mécanisme d'attente. Plusieurs threads doivent avoir accès au même objet dans les piscines formant file d'attente. Après la nécessité d'attendre devant le fil usé, le thread suivant, puis utiliser cette ressource.
  3. régions critiques: un segment de code de programme dans threads simultanés, distincts pour accéder au même objet, et peut être bloc.
  4. Objet de verrouillage: chaque objet désigné par un verrou agencé de manière à synchroniser la déclaration. Il est un verrou exclusif unique. Si un thread d'acquérir l'objet de verrouillage, l'opération aura le droit à l'objet, tout autre threads ne peuvent pas effectuer toutes les opérations sur l'objet.

Fil de sécurité: la nécessité de former une file d'attente, et un mécanisme de verrouillage.

  1. Après avoir obtenu l'objet verrou exclusif, des ressources exclusives, les autres threads doivent attendre
  2. la concurrence multithreading, verrouillage, entraînant la libération de la commutation de contexte plus de verrouillage et le délai d'ordonnancement. problèmes de performance Cause
  3. Si un thread haute priorité à attendre un fil de faible priorité, la priorité conduira, ce qui provoque des problèmes de performance

mécanisme de verrouillage, bloc Synchronize

  1. Chacun d'eux correspond à un objet de verrouillage, une synchroniser chaque méthode doit appeler la méthode d'obtention du verrouillage de l'objet peut effectuer. Dans le cas contraire, le fil est bloqué. Méthode, si elle est appliquée, sera le verrou exclusif. Jusqu'à ce retour de la méthode, il se verrouille libération. thread bloqué peut acquérir le verrou de ré-entrer dans l'état exécutable.
  2. synchronisation bloc de synchronisation: synchronisation (obj) {}, obj appelé moniteur de synchronisation
    tout objet peut être utilisé comme moniteur de synchronisation.
    Le procédé de synchronisation sans spécifier moniteur de synchronisation, parce que la méthode de synchronisation du moniteur de synchronisation est l'objet lui - même.
    Conteneur CopyOnWriteArrayList <type> ont été intégrés dans le mécanisme de verrouillage.

Retour en haut de page

Six, communication

Insérer ici l'image Description
 Dans la figure. Quand il y a un entrepôt de produits, les consommateurs doivent être informés. Puis, quand aucune marchandise, informer le producteur
de transfert tel (communication) du message

Parce que les blocs de synchronisation de synchronisation, empêche les mises à jour simultanées aux mêmes ressources partagées pour réaliser la synchronisation. Cependant, il ne peut pas parvenir à des problèmes de communication entre les différents threads.

Résoudre un problème de communication:

  1. Quelle méthode ne peut être utilisée dans la méthode de synchronisation ou un code synchrone. Vous pouvez résoudre les problèmes de communication.
    wait (): fil d' attente jusqu'à ce que les notifications de fil. Et le sommeil () différent. Il libérera le verrou.
    avertissons (): réveillez - vous un fil dans un état d'attente
    ontifyAll (): appel de réveil à tous la méthode fil attente () sur le même objet. priorité d'ordonnancement de haute priorité

  2. Tube-
    modèle de collaboration simultanée « modèle producteur / consommateur » est le tube.
    Mettre en place une zone tampon entre les producteurs et les consommateurs. Il y a un conteneur de données, les consommateurs peuvent consommer, les
    données sont vides, en attente pour les consommateurs, les producteurs peuvent être produits. Les données est pleine, attente producteur

  3. Soyez paramètres booléens. Comme les lumières comme     
    il est l'utilisation de la valeur booléenne, réglage du commutateur Remarque: Ne pas oublier que , après l' attente, le besoin de revenir en arrière.

  4. Horaire régulier à l'
    aide de la minuterie, TimeTask atteindre le moment pour commencer un fil.

Retour en haut de page

Publié 12 articles originaux · louanges gagnées 0 · Vues 110

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44304524/article/details/104862777
conseillé
Classement