Heim  >  Artikel  >  Java  >  [Java-Grundlagen] Thread-Instanz

[Java-Grundlagen] Thread-Instanz

黄舟
黄舟Original
2017-02-07 10:58:081464Durchsuche

Einige Freunde fragten heute nach dem Konzept des Java-Multithreadings. Der Herausgeber ist der Meinung, dass wir nur durch die Beherrschung des grundlegenden Thread-Konzepts ein tieferes Verständnis von Multithreading erlangen können Wenn mehrere Dinge gleichzeitig ausgeführt werden, können während der tatsächlichen Verwendung mehrere Threads denselben Datenblock bearbeiten, sodass das Problem der Multithreading-Aufmerksamkeit entsteht. Lassen Sie uns zunächst die Grundkonzepte von Threads und der einfachen Code-Implementierung verstehen

Klassisches Beispiel für die Demonstration von Java-Thread-Lern-Lesern und -Schreibern

Hauptsächlich das klassischste Beispiel für Java-Thread-Lern-Leser und -Schreiber Verwendung von Thread-bezogenem Wissen Wie folgt:

-Thread-Start und -Ausführung

-Thread-Ruhezustand (Ruhezustand)

-Datenobjektsperre (synchronisiert)

- Datenobjekt Warten und freigeben (warten und benachrichtigen)

Programmimplementierung:

-ObjectData-Datenklassenobjekt, die Sperrung wird über das synchronisierte Schlüsselwort implementiert und in Thread-Readern und -Writern verwendet.

-ConsumerThread Der Consumer-Thread benachrichtigt den Produzenten-Thread, nachdem er den Zählwert im Datenobjekt gelesen hat.

-ProductThread Der Producer-Thread verarbeitet den Zählwert im Datenobjekt und fügt jedes Mal 1 hinzu , Benachrichtigen Sie dann den Verbraucherthread

Das Klassenstrukturdiagramm lautet wie folgt:

[Java-Grundlagen] Thread-Instanz

Code-Implementierung

Verbraucherlesethread

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

Thread schreiben – Produzententhread

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

Datenobjektklasse

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);
    }
}

Testcode:

public static void main(String[] args) {
        ObjectData data = new ObjectData();
        ConsumerThread ct = new ConsumerThread(data);
        ProductThread pt = new ProductThread(data);
 
        ct.start();
        pt.start();
}

Zusammenfassung:

Der Beispielprogrammcode vervollständigt die Implementierung der Synchronisationssteuerung für das Lesen und Schreiben von Daten zwischen Threads durch Warten und Benachrichtigen. Demonstriert die Verwendung des Java-Synchronisierungsschlüsselworts „synced“ und die Verwendung von Threads.

Das Obige ist der Inhalt der Thread-Instanz [Java Basics]. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn