Maison > Java > javaDidacticiel > le corps du texte

[Bases de Java] Instance de thread

黄舟
Libérer: 2017-02-07 10:58:08
original
1481 Les gens l'ont consulté

Aujourd'hui, un ami a posé des questions sur le concept du multi-threading Java en arrière-plan. L'éditeur pense que ce n'est qu'en maîtrisant le concept de base du thread que nous pouvons avoir une compréhension plus profonde du multi-threading. boucles exécutées en parallèle. Si plusieurs choses sont effectuées simultanément, plusieurs threads peuvent fonctionner sur le même bloc de données lors de l'utilisation réelle, ce qui pose le problème du multithreading. Tout d'abord, comprenons les concepts de base des threads et de l'implémentation de code simple

Exemple classique de démonstration de lecteur et d'écrivain d'apprentissage de thread Java

L'exemple le plus classique de lecteur et d'écrivain d'apprentissage de thread Java, principalement utiliser les connaissances liées aux threads comme suit :

-démarrage et exécution du thread

-thread sleep (veille)

-verrouillage des objets de données (synchronisé)

- objet de données Attendre et libérer (attendre et notifier) ​​

Implémentation du programme :

-Objet de classe de données ObjectData, le verrouillage est implémenté via le mot-clé synchronisé et est utilisé dans les lecteurs et les rédacteurs de threads.

-Le thread consommateur ConsumerThread, après avoir lu la valeur de comptage dans l'objet de données, informe le thread producteur

-Le thread producteur ProductThread, opère sur la valeur de comptage dans l'objet de données, en ajoutant 1 à chaque fois , Ensuite, informez le fil consommateur

Le diagramme de structure de classe est le suivant :

[Bases de Java] Instance de thread

Implémentation du code

Fil de lecture par le consommateur

package com.gloomyfish.jse.thirdteen;
 
public class ConsumerThread extends Thread {
    private ObjectData data;
    public ConsumerThread(ObjectData data) {
        this.data = data;
    }
 
    @Override
    public void run() {
        while(true) {
            try {
                synchronized (data) {
                    data.wait();
                    data.read();
                    data.notify();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
 
}
Copier après la connexion

Rédaction du fil de discussion du producteur

package com.gloomyfish.jse.thirdteen;
 
public class ProductThread extends Thread {
    private ObjectData data;
 
    public ProductThread(ObjectData data) {
        this.data = data;
    }
 
    @Override
    public void run() {
        while (true) {
            try {
                synchronized (data) {
                    data.write();
                    Thread.sleep(3000);
                    data.notify();
                    data.wait();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
 
}
Copier après la connexion

Classe d'objet de données

package com.gloomyfish.jse.thirdteen;
 
public class ObjectData {
 
    private int count;
     
    public ObjectData() {
        count = 0;
    }
     
    public void read() {
        System.out.println("read count : " + count);
        System.out.println();
    }
     
    public void write() {
        count++;
        System.out.println("write count : " + count);
    }
}
Copier après la connexion

Code de test :

public static void main(String[] args) {
        ObjectData data = new ObjectData();
        ConsumerThread ct = new ConsumerThread(data);
        ProductThread pt = new ProductThread(data);
 
        ct.start();
        pt.start();
}
Copier après la connexion

Résumé :

L'exemple de code de programme explique comment réaliser le contrôle de synchronisation de la lecture et de l'écriture des données entre les threads via wait and notify. Démontre l'utilisation du mot-clé de synchronisation Java synchronisé et l'utilisation des threads.

Ce qui précède est le contenu de l'instance de fil [java basics] Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal