Inhaltsverzeichnis
So implementieren Sie Multithreading
Wie Java die Thread-Sicherheit implementiert
Join()-Methode
wait()
notify()
notifyAll()
Heim Java javaLernprogramm Multithreading-Implementierung und Thread-Sicherheit in der Java-Entwicklung

Multithreading-Implementierung und Thread-Sicherheit in der Java-Entwicklung

Jul 23, 2018 am 09:36 AM
java多线程 java开发

So implementieren Sie Multithreading

● Erben Sie die Thread-Klasse, um eine Thread-Klasse zu erstellen und die Ausführungsmethode zu überschreiben. Die Ausführungsmethode stellt die Aufgaben dar, die ausgeführt werden Der Thread muss abgeschlossen werden. Rufen Sie Start() des Thread-Objekts auf, um den Thread zu starten. Die Thread-Klasse hat die Thread-Klasse geerbt und kann daher keine anderen übergeordneten Klassen erben.

class ThreadTest extends Thread {  

    Thread thread;  

    public ThreadTest(Thread thread) {  
      this.thread = thread;  
  }  

   @Override  
   public void run() {  
      synchronized (thread) {  
          System.out.println("getObjectLock");  
         try {  
             Thread.sleep(9000);  
       } catch (InterruptedException ex) {  
          ex.printStackTrace();  
         }  
           System.out.println("ReleaseObjectLock");  
    }  
   }  
 }
Nach dem Login kopieren
Nach dem Login kopieren

● Implementieren Sie die Runnable-Schnittstelle, um eine Thread-Klasse zu erstellen, definieren Sie die Runnable-Implementierungsklasse und überschreiben Sie die Ausführungsmethode.

  class RunnableImpl implements Runnable {  
    
     public void run() {  
          try {  
             System.out.println("Begin sleep");  
             Thread.sleep(2000);  
             System.out.println("End sleep");  
          } catch (InterruptedException e) {  
              e.printStackTrace();  
          }  
      }  
   }
Nach dem Login kopieren

● Implementieren Sie die Callable-Schnittstelle, schreiben Sie die call()-Methode neu und call() dient als Ausführung des Thread-Körpers mit Rückgabewert

● Thread-Pool, verwenden Sie den Thread-Pool, um Thread-Objekte zu generieren java.util.concurrent.ExecutorService, java.util.concurrent.Executors;

Wie Java die Thread-Sicherheit implementiert

● Sich gegenseitig ausschließende Synchronisierung: Es wird empfohlen, das synchronisierte Schlüsselwort für die Synchronisierung zu verwenden. Es gibt die ReentrantLock-Klasse und der Implementierungseffekt ist ähnlich original synchronisiert wird weiterhin empfohlen
● Blockierungsfreie Synchronisierung: Zur Ausführung sind Hardwareanweisungen erforderlich. Häufig verwendete Anweisungen sind: Test-and-Set Fetch-and-Increment Swap Compare-and-Swap (CAS) Load-Linked/Store-Conditional (LL/SC) Typische Anwendungen : AtomicInteger in
● Keine Synchronisationslösung: Speichern Sie Variablen in lokalen Threads, damit es bei der Parallelität mehrerer Threads nicht zu Fehlern kommt. In Java wird hauptsächlich die ThreadLocal-Klasse verwendet.

Join()-Methode

thread.Join fügt den angegebenen Thread zum aktuellen Thread hinzu und kann zwei abwechselnd ausgeführte Threads zu sequentiellen Ausführungsthreads zusammenführen. Wenn beispielsweise die Join()-Methode von Thread A in Thread B aufgerufen wird, wird Thread B nicht weiter ausgeführt, bis Thread A die Ausführung abgeschlossen hat.

t.join(); // Lassen Sie den aufrufenden Thread vorher die Ausführung abschließen.
t.join(1000); //Warten auf t Thread, die Wartezeit beträgt 1000 Millisekunden, unabhängig von der Zeitüberschreitung

public class JoinTest implements Runnable{  

    public static int a = 0;  

    public void run() {  
        for (int k = 0; k < 5; k++) {  
            a = a + 1;  
        }  
    }  

    public static void main(String[] args) throws Exception {  
        Runnable r = new JoinTest();  
        Thread t = new Thread(r);  
        t.start();        
        t.join();//等待t线程完成后输出,可保证a=5;
        System.out.println(a);  
    }         
}
Nach dem Login kopieren
Nach dem Login kopieren

wait()

Die Wartemethode des Objekts hat drei Ebenen Lademethode, von denen eine, wait(), auf unbestimmte Zeit (immer) wartet, bis andere Threads die Methode notify oder notifyAll aufrufen, um den aktuellen Thread aufzuwecken, wait(long timeout) und wait(long timeout, int nanos). ), Passieren zulassen. Geben Sie die Zeit ein, die der aktuelle Thread warten muss, bevor er aktiviert wird. Timeout ist die Anzahl der Millisekunden und Nanos ist die Anzahl der Nanosekunden.

notify()

Die Benachrichtigungsmethode weckt nur einen wartenden (Objekt-)Thread und veranlasst, dass der Thread mit der Ausführung beginnt. Wenn also mehrere Threads auf ein Objekt warten, aktiviert diese Methode nur einen der Threads. Welcher Thread ausgewählt werden soll, hängt von der Implementierung der Multithread-Verwaltung durch das Betriebssystem ab.

notifyAll()

notifyAll weckt alle wartenden Threads auf, obwohl es von der Betriebssystemimplementierung abhängt, welcher Thread ihn zuerst verarbeitet.
Diese Methoden können im „Produzenten-Verbraucher“-Problem verwendet werden. Der Verbraucher ist der Thread, der auf das Objekt in der Warteschlange wartet, und der Produzent ist der Thread, der das Objekt in der Warteschlange freigibt und andere Threads benachrichtigt.

So implementieren Sie Multithreading

● Erben Sie die Thread-Klasse, um eine Thread-Klasse zu erstellen, und überschreiben Sie die Ausführungsmethode. Die Ausführungsmethode stellt die Aufgabe dar, die der Thread ausführen muss () des Thread-Objekts, um den Thread zu starten. Die Thread-Klasse hat die Thread-Klasse geerbt und kann daher keine anderen übergeordneten Klassen erben.

class ThreadTest extends Thread {  

    Thread thread;  

    public ThreadTest(Thread thread) {  
      this.thread = thread;  
  }  

   @Override  
   public void run() {  
      synchronized (thread) {  
          System.out.println("getObjectLock");  
         try {  
             Thread.sleep(9000);  
       } catch (InterruptedException ex) {  
          ex.printStackTrace();  
         }  
           System.out.println("ReleaseObjectLock");  
    }  
   }  
 }
Nach dem Login kopieren
Nach dem Login kopieren

● Implementieren Sie die Runnable-Schnittstelle, um eine Thread-Klasse zu erstellen, definieren Sie die Runnable-Implementierungsklasse und überschreiben Sie die Ausführungsmethode.

  class RunnableImpl implements Runnable {  
    
      public void run() {  
          try {  
              System.out.println("Begin sleep");  
              Thread.sleep(2000);  
              System.out.println("End sleep");  
          } catch (InterruptedException e) {  
              e.printStackTrace();  
           }  
       }  
   }
Nach dem Login kopieren

● Implementieren Sie die Callable-Schnittstelle, schreiben Sie die call()-Methode neu und call() dient als Ausführung des Thread-Körpers mit Rückgabewert

● Thread-Pool, verwenden Sie den Thread-Pool, um Thread-Objekte zu generieren java.util.concurrent.ExecutorService, java.util.concurrent.Executors;

Wie Java die Thread-Sicherheit implementiert

● Sich gegenseitig ausschließende Synchronisierung: Es wird empfohlen, das synchronisierte Schlüsselwort für die Synchronisierung zu verwenden. Es gibt die ReentrantLock-Klasse und der Implementierungseffekt ist ähnlich original synchronisiert wird weiterhin empfohlen
● Blockierungsfreie Synchronisierung: Zur Ausführung sind Hardwareanweisungen erforderlich. Häufig verwendete Anweisungen sind: Test-and-Set Fetch-and-Increment Swap Compare-and-Swap (CAS) Load-Linked/Store-Conditional (LL/SC) Typische Anwendungen : AtomicInteger in
● Keine Synchronisierungslösung: Speichern Sie die Variablen im lokalen Thread, sodass keine gleichzeitigen Fehler mehrerer Threads auftreten. In Java wird hauptsächlich die ThreadLocal-Klasse verwendet.

Join()-Methode

thread.Join fügt den angegebenen Thread zum aktuellen Thread hinzu und kann zwei abwechselnd ausgeführte Threads zu sequentiellen Ausführungsthreads zusammenführen. Wenn beispielsweise die Join()-Methode von Thread A in Thread B aufgerufen wird, wird Thread B nicht weiter ausgeführt, bis Thread A die Ausführung abgeschlossen hat.

t.join(); // Lassen Sie den aufrufenden Thread die Ausführung vorher abschließen.
t.join(1000); //Warten auf t Thread, die Wartezeit beträgt 1000 Millisekunden, unabhängig von der Zeitüberschreitung

public class JoinTest implements Runnable{  

    public static int a = 0;  

    public void run() {  
        for (int k = 0; k < 5; k++) {  
            a = a + 1;  
        }  
    }  

    public static void main(String[] args) throws Exception {  
        Runnable r = new JoinTest();  
        Thread t = new Thread(r);  
        t.start();        
        t.join();//等待t线程完成后输出,可保证a=5;
        System.out.println(a);  
    }         
}
Nach dem Login kopieren
Nach dem Login kopieren

wait()

Die Wartemethode des Objekts hat drei Ebenen Lademethode, von denen eine, wait(), auf unbestimmte Zeit (immer) wartet, bis andere Threads die Methode notify oder notifyAll aufrufen, um den aktuellen Thread aufzuwecken, wait(long timeout) und wait(long timeout, int nanos). ), Passieren zulassen. Geben Sie die Zeit ein, die der aktuelle Thread warten muss, bevor er aktiviert wird. Timeout ist die Anzahl der Millisekunden und Nanos ist die Anzahl der Nanosekunden.

notify()

Die notify-Methode weckt nur einen wartenden (Objekt-)Thread und veranlasst den Thread, mit der Ausführung zu beginnen. Wenn also mehrere Threads auf ein Objekt warten, aktiviert diese Methode nur einen der Threads. Welcher Thread ausgewählt werden soll, hängt von der Implementierung der Multithread-Verwaltung durch das Betriebssystem ab.

notifyAll()

notifyAll weckt alle wartenden Threads auf, obwohl es von der Betriebssystemimplementierung abhängt, welcher Thread ihn zuerst verarbeitet.
Diese Methoden können im „Produzenten-Verbraucher“-Problem verwendet werden. Der Verbraucher ist der Thread, der auf das Objekt in der Warteschlange wartet, und der Produzent ist der Thread, der das Objekt in der Warteschlange freigibt und andere Threads benachrichtigt.

Das obige ist der detaillierte Inhalt vonMultithreading-Implementierung und Thread-Sicherheit in der Java-Entwicklung. 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)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen 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)

Welche fünf Java-Karriereoptionen passen am besten zu Ihnen? Welche fünf Java-Karriereoptionen passen am besten zu Ihnen? Jan 30, 2024 am 10:35 AM

In der Java-Branche gibt es fünf Beschäftigungsrichtungen. Welche ist für Sie geeignet? Java erfreut sich als weit verbreitete Programmiersprache im Bereich der Softwareentwicklung seit jeher großer Beliebtheit. Aufgrund der starken plattformübergreifenden Natur und des umfangreichen Entwicklungsrahmens haben Java-Entwickler vielfältige Beschäftigungsmöglichkeiten in verschiedenen Branchen. In der Java-Branche gibt es fünf Hauptbeschäftigungsrichtungen, darunter JavaWeb-Entwicklung, mobile Anwendungsentwicklung, Big-Data-Entwicklung, eingebettete Entwicklung und Cloud-Computing-Entwicklung. Jede Richtung hat ihre Eigenschaften und Vorteile. Die fünf Richtungen werden im Folgenden besprochen.

Unverzichtbar für die Java-Entwicklung: Empfehlen Sie das effizienteste Dekompilierungstool Unverzichtbar für die Java-Entwicklung: Empfehlen Sie das effizienteste Dekompilierungstool Jan 09, 2024 pm 07:34 PM

Unverzichtbar für Java-Entwickler: Empfehlen Sie das beste Dekompilierungstool. Es sind spezifische Codebeispiele erforderlich. Einführung: Während des Java-Entwicklungsprozesses stoßen wir häufig auf Situationen, in denen wir vorhandene Java-Klassen dekompilieren müssen. Die Dekompilierung kann uns helfen, den Code anderer Leute zu verstehen und zu lernen oder Reparaturen und Optimierungen vorzunehmen. In diesem Artikel werden einige der besten Java-Dekompilierungstools empfohlen und einige spezifische Codebeispiele bereitgestellt, um den Lesern das Erlernen und Verwenden dieser Tools zu erleichtern. 1. JD-GUIJD-GUI ist eine sehr beliebte Open Source

Detaillierte Erläuterung der Verwendungsszenarien und Funktionen des flüchtigen Schlüsselworts in Java Detaillierte Erläuterung der Verwendungsszenarien und Funktionen des flüchtigen Schlüsselworts in Java Jan 30, 2024 am 10:01 AM

Detaillierte Erläuterung der Rolle und Anwendungsszenarien des Schlüsselworts volatile in Java 1. Die Rolle des Schlüsselworts volatile In Java wird das Schlüsselwort volatile verwendet, um eine Variable zu identifizieren, die zwischen mehreren Threads sichtbar ist, dh um die Sichtbarkeit sicherzustellen. Insbesondere wenn eine Variable als flüchtig deklariert wird, sind alle Änderungen an der Variablen sofort anderen Threads bekannt. 2. Anwendungsszenarien des flüchtigen Schlüsselworts Das flüchtige Schlüsselwort Statusflag eignet sich für einige Statusflag-Szenarien, z

Offengelegte Java-Entwicklungsfähigkeiten: Implementierung von Datenverschlüsselungs- und -entschlüsselungsfunktionen Offengelegte Java-Entwicklungsfähigkeiten: Implementierung von Datenverschlüsselungs- und -entschlüsselungsfunktionen Nov 20, 2023 pm 05:00 PM

Java-Entwicklungsfähigkeiten enthüllt: Implementierung von Datenverschlüsselungs- und -entschlüsselungsfunktionen Im aktuellen Informationszeitalter ist Datensicherheit zu einem sehr wichtigen Thema geworden. Um die Sicherheit sensibler Daten zu schützen, verwenden viele Anwendungen Verschlüsselungsalgorithmen zur Verschlüsselung der Daten. Als sehr beliebte Programmiersprache bietet Java auch eine umfangreiche Bibliothek an Verschlüsselungstechnologien und -tools. In diesem Artikel werden einige Techniken zur Implementierung von Datenverschlüsselungs- und -entschlüsselungsfunktionen in der Java-Entwicklung vorgestellt, um Entwicklern dabei zu helfen, die Datensicherheit besser zu schützen. 1. Auswahl des Datenverschlüsselungsalgorithmus Java unterstützt viele

Austausch von Java-Entwicklungserfahrungen von Grund auf: Aufbau eines Nachrichtenabonnementsystems Austausch von Java-Entwicklungserfahrungen von Grund auf: Aufbau eines Nachrichtenabonnementsystems Nov 20, 2023 pm 04:02 PM

Als sehr beliebte Programmiersprache war Java schon immer bei allen beliebt. Als ich anfing, die Java-Entwicklung zu lernen, stieß ich einmal auf ein Problem: Wie man ein Nachrichtenabonnementsystem erstellt. In diesem Artikel werde ich meine Erfahrungen beim Aufbau eines Nachrichtenabonnementsystems von Grund auf teilen und hoffe, dass ich damit auch anderen Java-Anfängern helfen kann. Schritt 1: Wählen Sie eine geeignete Nachrichtenwarteschlange. Um ein Nachrichtenabonnementsystem aufzubauen, müssen Sie zunächst eine geeignete Nachrichtenwarteschlange auswählen. Zu den beliebtesten Nachrichtenwarteschlangen, die derzeit auf dem Markt sind, gehören ActiveMQ,

Offengelegte Java-Entwicklungsfähigkeiten: Implementierung von Bildkomprimierungs- und Zuschneidefunktionen Offengelegte Java-Entwicklungsfähigkeiten: Implementierung von Bildkomprimierungs- und Zuschneidefunktionen Nov 20, 2023 pm 03:27 PM

Java ist eine im Bereich der Softwareentwicklung weit verbreitete Programmiersprache. Ihre umfangreichen Bibliotheken und leistungsstarken Funktionen können zur Entwicklung verschiedener Anwendungen verwendet werden. Bildkomprimierung und -zuschnitt sind häufige Anforderungen bei der Entwicklung von Web- und Mobilanwendungen. In diesem Artikel stellen wir einige Java-Entwicklungstechniken vor, die Entwicklern bei der Implementierung von Bildkomprimierungs- und Zuschneidefunktionen helfen sollen. Lassen Sie uns zunächst die Implementierung der Bildkomprimierung besprechen. Bei Webanwendungen müssen Bilder häufig über das Netzwerk übertragen werden. Wenn das Bild zu groß ist, dauert das Laden länger und es wird mehr Bandbreite beansprucht. deshalb wir

Entdecken Sie die Funktionsprinzipien und Eigenschaften von Java-Multithreading Entdecken Sie die Funktionsprinzipien und Eigenschaften von Java-Multithreading Feb 21, 2024 pm 03:39 PM

Entdecken Sie die Funktionsprinzipien und Eigenschaften von Java-Multithreading. Einführung: In modernen Computersystemen ist Multithreading zu einer gängigen Methode der gleichzeitigen Verarbeitung geworden. Als leistungsstarke Programmiersprache bietet Java einen umfassenden Multithreading-Mechanismus, der es Programmierern ermöglicht, den Multi-Core-Prozessor des Computers besser zu nutzen und die Effizienz der Programmausführung zu verbessern. In diesem Artikel werden die Funktionsprinzipien und Eigenschaften von Java-Multithreading untersucht und anhand spezifischer Codebeispiele veranschaulicht. 1. Das Grundkonzept des Multithreadings Multithreading bezieht sich auf die gleichzeitige Ausführung mehrerer Threads in einem Programm, wobei jeder Thread unterschiedliche Prozesse verarbeitet

Java-Multithread-Debugging-Technologie enthüllt Java-Multithread-Debugging-Technologie enthüllt Apr 12, 2024 am 08:15 AM

Antworten der Multithread-Debugging-Technologie: 1. Herausforderungen beim Multithread-Code-Debugging: Die Interaktion zwischen Threads führt zu komplexem und schwer nachverfolgbarem Verhalten. 2. Java-Multithread-Debugging-Technologie: Zeilenweises Debuggen von Thread-Dumps (jstack) zum Überwachen von Ein- und Ausgangsereignissen, Thread-Lokalvariablen. 3. Praktischer Fall: Verwenden Sie Thread-Dump, um Deadlocks zu finden, und verwenden Sie Monitorereignisse, um die Ursache des Deadlocks zu ermitteln. 4. Schlussfolgerung: Die von Java bereitgestellte Multi-Thread-Debugging-Technologie kann Probleme im Zusammenhang mit Thread-Sicherheit, Deadlock und Konflikten effektiv lösen.

See all articles