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 :
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(); } } } }
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(); } } } }
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); } }
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(); }
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) !