Heim  >  Artikel  >  Java  >  Multithread-Programmierung in Java

Multithread-Programmierung in Java

王林
王林Original
2023-06-09 12:13:471666Durchsuche

Multithread-Programmierung in Java

Java ist eine im Bereich der Softwareentwicklung weit verbreitete Programmiersprache, und Multithread-Programmierung ist ein gängiges Programmiermuster in Java. Durch Multithread-Programmierung kann ein Programm mehrere Aufgaben gleichzeitig ausführen und so die Parallelität und Effizienz des Programms verbessern. Dieser Artikel führt Sie in die Multithread-Programmierung in Java ein.

Das Grundkonzept von Multi-Threading

Multi-Threading bezieht sich auf die Fähigkeit eines Programms, mehrere Aufgaben gleichzeitig auszuführen. Bei einer Single-Core-CPU wird Multithreading dadurch erreicht, dass die CPU schnell zwischen verschiedenen Aufgaben wechselt. Bei Multicore-CPUs können mehrere Aufgaben gleichzeitig auf verschiedenen CPU-Kernen ausgeführt werden.

Multi-Threading-Implementierung in Java

Multi-Threading in Java wird durch die Erstellung von Objekten der Thread-Klasse implementiert, die eine schlanke Thread-Implementierung ermöglicht. Threads können durch Erben der Thread-Klasse oder Implementieren der Runnable-Schnittstelle erstellt werden.

  1. Die Thread-Klasse erben

Die Thread-Klasse zu erben ist die einfachste Möglichkeit, sie zu implementieren. Sie müssen lediglich eine Klasse erstellen und die Thread-Klasse erben und die run()-Methode überschreiben, um die Multithreading-Funktionalität zu implementieren. Wie unten gezeigt:

public class MyThread extends Thread {

    @Override
    public void run() {
        // 运行多线程的函数代码
    }
}

Erstellen Sie ein Objekt von MyThread und rufen Sie die Methode start() auf, um einen neuen Thread zu starten:

MyThread thread = new MyThread();
thread.start();
  1. Implementieren Sie die Runnable-Schnittstelle

Die Implementierung der Runnable-Schnittstelle ist auch eine Möglichkeit, Multithreading zu implementieren. Es muss die run()-Methode implementieren, aber eine Runnable-Schnittstelleninstanz an den Konstruktor der Thread-Klasse übergeben. Wie unten gezeigt:

public class MyRunnable implements Runnable {

    @Override
    public void run() {
        // 运行多线程函数代码
    }
}

Erstellen und starten Sie den Thread von MyRunnable:

MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();

Die Thread-Klasse in Java bietet einige andere Methoden und Eigenschaften zum Überwachen und Steuern des Status und Verhaltens des Threads, wie zum Beispiel join(), yield() , sleep(), setPriority() und isAlive() Methoden.

Multithread-Synchronisation

Bei der Multithread-Programmierung können mehrere Threads auf dieselbe Ressource zugreifen. Zu diesem Zeitpunkt ist es notwendig, die Thread-Synchronisierung und den gegenseitigen Ausschluss sicherzustellen, um zu verhindern, dass mehrere Threads gleichzeitig dieselbe Ressource ändern, was zu Datenverwirrungen oder Fehlern führt. Java bietet eine Vielzahl von Synchronisierungsmethoden:

  1. Synchronisierte Codeblöcke

Mit dem synchronisierten Schlüsselwort können Sie eine Methode oder einen Codeblock als synchronisiert markieren, sodass nur ein Thread, der den Block betritt, den darin enthaltenen Code ausführen kann. Wie unten gezeigt:

public class SynchronizedThread {
    // 定义一个计数器
    private int count = 0;

    // 定义同步的方法
    public synchronized void addCount() {
        count++;
        System.out.println("count = " + count);
    }

    // 定义一个线程类来调用 addCount() 方法
    private static class MyThread extends Thread {
        private SynchronizedThread synchronizedThread;

        public MyThread(SynchronizedThread synchronizedThread) {
            this.synchronizedThread = synchronizedThread;
        }

        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                synchronizedThread.addCount();
            }
        }
    }

    public static void main(String[] args) {
        SynchronizedThread synchronizedThread = new SynchronizedThread();
        MyThread thread1 = new MyThread(synchronizedThread);
        MyThread thread2 = new MyThread(synchronizedThread);
        thread1.start();
        thread2.start();
    }
}
  1. Synchronisierte Methoden

Nachdem eine Methode als synchronisiert markiert wurde, wird die Methode synchronisiert und nur ein Thread kann darauf zugreifen. Zum Beispiel:

public synchronized void addCount() {
    count++;
    System.out.println("count = " + count);
}
  1. Lock-Klasse

Lock ist ein weiterer Synchronisationsmechanismus in Java. Es bietet eine flexiblere Thread-Synchronisierung und erleichtert so den Wechsel zwischen mehreren Sperren. Lock implementiert die java.util.concurrent.locks.Lock-Schnittstelle und stellt die folgenden Methoden bereit:

  • lock(): Versuchen Sie, die Sperre zu erhalten, wenn die Sperre bereits belegt ist.
  • unlock(): Sperre aufheben.
  • tryLock(): Versuchen Sie, die Sperre zu erhalten, wenn die Sperre bereits belegt ist, wird sofort false zurückgegeben.
  • newCondition(): Gibt die Condition-Instanz zurück, die sich auf diese Sperre bezieht. Bevor die Methodewait() von Condition aufgerufen wird, muss der Thread die mit der Sperre verknüpfte Objektmonitorsperre erhalten.

Beispiel:

Lock lock = new ReentrantLock();

public void addCount() {
    lock.lock();
    try {
        count++;
        System.out.println("count = " + count);
    } finally {
        lock.unlock();
    }
}

Java Thread Pool

Der Thread-Pool in Java ist ein Mechanismus zum Verwalten und Wiederverwenden von Threads. Der Thread-Pool kann die CPU-Leistung besser nutzen, die Erstellung und Zerstörung von Threads reduzieren und die Reaktionsgeschwindigkeit des Programms verbessern. In Java können Thread-Pools über die ThreadPoolExecutor-Klasse erstellt werden. Sie können Parameter wie die Größe des Thread-Pools und die Länge der Warteschlange angeben und verschiedene Aufgaben ausführen.

Zum Beispiel:

ExecutorService threadPool = Executors.newFixedThreadPool(10);
threadPool.execute(new Runnable() {
    @Override
    public void run() {
        // 执行任务
    }
});

Zusammenfassung

Die Multithread-Programmierung von Java ist ein wichtiges Mittel zur Verbesserung der Parallelität und Effizienz von Programmen. Neben der Einführung der beiden Möglichkeiten zum Erstellen von Multithreads in Java (Erben der Thread-Klasse und Implementieren der Runnable-Schnittstelle) werden auch verschiedene Synchronisierungsmethoden und Java-Thread-Pools vorgestellt. Das Verständnis der grundlegenden Konzepte und Implementierungsmethoden der Multithread-Programmierung ist für die Entwicklung effizienter und hochgradig gleichzeitiger Programme von entscheidender Bedeutung.

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

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