Heim Java javaLernprogramm So verwenden Sie Threads in Java

So verwenden Sie Threads in Java

Feb 18, 2024 pm 12:47 PM
Thread-Erstellung und -Start Thread-Synchronisation und Kommunikation

So verwenden Sie Threads in Java

So verwenden Sie Thread in Java, spezifische Codebeispiele

  1. Einführung
    In Java ist Multithread-Programmierung eine leistungsstarke Möglichkeit, die Effizienz und Parallelität des Programms zu verbessern. Die Thread-Klasse ist die Kernklasse in Java, die zum Erstellen und Verwalten von Threads verwendet wird. In diesem Artikel wird die Verwendung der Thread-Klasse ausführlich vorgestellt und einige spezifische Codebeispiele bereitgestellt.
  2. Thread erstellen
    Thread-Objekte können auf zwei Arten erstellt werden: durch Erben der Thread-Klasse und durch Implementieren der Runnable-Schnittstelle. Das Erben der Thread-Klasse ist eine einfache Möglichkeit, aber da Java nur die Einzelvererbung unterstützt, schränkt diese Methode die Skalierbarkeit des Codes ein. Durch die Implementierung der Runnable-Schnittstelle kann dieses Problem vermieden werden, da Java die Implementierung mehrerer Schnittstellen unterstützt.

Das Folgende ist ein Codebeispiel für die Verwendung von zwei Methoden zum Erstellen eines Threads:

// 继承Thread类
class MyThread extends Thread {
    public void run(){
        // 线程执行的代码
    }
}

// 实现Runnable接口
class MyRunnable implements Runnable {
    public void run(){
        // 线程执行的代码
    }
}

// 创建线程并启动
public static void main(String[] args){
    // 创建继承Thread类的线程
    MyThread thread1 = new MyThread();
    thread1.start();

    // 创建实现Runnable接口的线程
    MyRunnable runnable = new MyRunnable();
    Thread thread2 = new Thread(runnable);
    thread2.start();
}
Nach dem Login kopieren

Im obigen Code ruft der durch Erben der Thread-Klasse erstellte Thread direkt die Startmethode auf, um den Thread zu starten, während der Thread durch Implementierung erstellt wird Die Runnable-Schnittstelle Der Thread muss zuerst ein Thread-Objekt erstellen, das Objekt, das die Runnable-Schnittstelle implementiert, als Parameter an den Thread-Konstruktor übergeben und dann die Startmethode des Thread-Objekts aufrufen, um den Thread zu starten.

  1. Lebenszyklus eines Threads
    Ein Thread durchläuft nach seiner Erstellung mehrere Zustände. Diese Zustände werden als Lebenszyklus des Threads bezeichnet. Allgemeine Thread-Status sind: Neu, Ausführbar, Wird ausgeführt, Blockiert und Beendet.

Das Folgende ist ein einfaches Beispiel, das den Lebenszyklus eines Threads zeigt:

class MyThread extends Thread {
    public void run(){
        System.out.println("线程执行中");

        try {
            Thread.sleep(1000); // 线程等待1秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("线程执行结束");
    }
}

public static void main(String[] args){
    MyThread thread = new MyThread();
    System.out.println("线程状态:" + thread.getState()); // 输出线程状态为New
    thread.start();
    System.out.println("线程状态:" + thread.getState()); // 输出线程状态为Runnable
    // 等待线程执行结束
    try {
        thread.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println("线程状态:" + thread.getState()); // 输出线程状态为Terminated
}
Nach dem Login kopieren

Im obigen Code wird nach dem Erstellen und Starten eines neuen Threads zunächst der Status des Threads als „Neu“ und dann der Status ausgegeben ist lauffähig. Nachdem Sie die Methode thread.join() aufgerufen und darauf gewartet haben, dass die Ausführung des Threads abgeschlossen ist, lautet der endgültige Ausgabestatus „Beendet“.

  1. Thread-Synchronisation und gegenseitiger Ausschluss
    Bei der Multithread-Programmierung sind Thread-Synchronisation und gegenseitiger Ausschluss sehr wichtige Konzepte. Wenn mehrere Threads gleichzeitig auf gemeinsam genutzte Ressourcen zugreifen, müssen geeignete Synchronisierungsmaßnahmen ergriffen werden, um Race Conditions und Dateninkonsistenzen zu vermeiden.

Java bietet Mechanismen wie das synchronisierte Schlüsselwort und die Lock-Schnittstelle, um Thread-Synchronisierung und gegenseitigen Ausschluss zu erreichen. Das Folgende ist ein Beispiel für die Verwendung des synchronisierten Schlüsselworts für die Thread-Synchronisierung:

class Counter {
    private int count = 0;

    // 线程安全的方法
    public synchronized void increment(){
        count++;
    }

    public int getCount(){
        return count;
    }
}

public static void main(String[] args){
    Counter counter = new Counter();

    Runnable runnable = () -> {
        for(int i=0; i<10000; i++){
            counter.increment();
        }
    };

    Thread thread1 = new Thread(runnable);
    Thread thread2 = new Thread(runnable);

    thread1.start();
    thread2.start();

    try {
        thread1.join();
        thread2.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    System.out.println("计数器的值:" + counter.getCount()); // 输出:20000
}
Nach dem Login kopieren

Im obigen Codebeispiel wird eine threadsichere Counter-Klasse definiert, in der die Inkrementierungsmethode das synchronisierte Schlüsselwort verwendet, um gemeinsam genutzte Daten zu synchronisieren. Zwei Threads riefen gleichzeitig das Counter-Objekt auf. Jeder Thread führte 10.000 Zählvorgänge aus und gab schließlich das korrekte Ergebnis von 20.000 aus.

  1. Unterbrechung von Threads
    Java bietet einen Mechanismus zum Unterbrechen eines laufenden Threads. Sie können die Interrupt-Methode der Thread-Klasse aufrufen, um ein Interrupt-Signal zu senden. Der unterbrochene Thread kann durch Aufrufen der isInterrupted-Methode feststellen, ob ein Interrupt-Signal empfangen wurde, und dann bei Bedarf entsprechende Maßnahmen ergreifen.

Hier ist ein Beispielcode, der zeigt, wie man einen Thread unterbricht:

class MyThread extends Thread {
    public void run(){
        while(!isInterrupted()){
            System.out.println("线程运行中");
            try {
                Thread.sleep(1000); // 线程等待1秒
            } catch (InterruptedException e) {
                e.printStackTrace();
                break;
            }
        }
        System.out.println("线程中断");
    }
}

public static void main(String[] args){
    MyThread thread = new MyThread();
    thread.start();

    try {
        Thread.sleep(5000); // 主线程等待5秒
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    thread.interrupt(); // 中断线程
}
Nach dem Login kopieren

Im obigen Code wartet der Hauptthread nach dem Erstellen und Starten eines neuen Threads 5 Sekunden und unterbricht dann den untergeordneten Thread.

Zusammenfassung:
Dieser Artikel stellt die Verwendung der Thread-Klasse in Java vor und enthält einige spezifische Codebeispiele. Sie können einen Thread erstellen, indem Sie die Thread-Klasse erben oder die Runnable-Schnittstelle implementieren, und den Thread durch Aufrufen der Startmethode starten. Das Verständnis des Thread-Lebenszyklus und der Konzepte der Thread-Synchronisierung und des gegenseitigen Ausschlusses ist für das Schreiben robuster Multithread-Programme sehr wichtig. Gleichzeitig ist das Verständnis, wie Threads unterbrochen werden, ein wichtiger Wissenspunkt in der Multithread-Programmierung. Die Beherrschung dieser Inhalte kann Entwicklern helfen, Multithread-Programmierung zu nutzen, um die Programmeffizienz und Parallelität zu verbessern.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Threads in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Mar 17, 2025 pm 05:35 PM

Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Mar 17, 2025 pm 05:44 PM

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Mar 17, 2025 pm 05:43 PM

In dem Artikel werden mit JPA für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden erläutert. Es deckt Setup, Entity -Mapping und Best Practices zur Optimierung der Leistung ab und hebt potenzielle Fallstricke hervor. [159 Charaktere]

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Mar 17, 2025 pm 05:46 PM

In dem Artikel werden Maven und Gradle für Java -Projektmanagement, Aufbau von Automatisierung und Abhängigkeitslösung erörtert, die ihre Ansätze und Optimierungsstrategien vergleichen.

Wie erstelle und verwende ich benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning und Abhängigkeitsmanagement? Wie erstelle und verwende ich benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning und Abhängigkeitsmanagement? Mar 17, 2025 pm 05:45 PM

In dem Artikel werden benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning- und Abhängigkeitsmanagement erstellt und verwendet, wobei Tools wie Maven und Gradle verwendet werden.

See all articles