Heim > Java > javaLernprogramm > Detaillierte Einführung in die Java-Synchronisation, asynchrone, blockierende und nicht blockierende grafische Codeanalyse

Detaillierte Einführung in die Java-Synchronisation, asynchrone, blockierende und nicht blockierende grafische Codeanalyse

黄舟
Freigeben: 2017-03-08 10:50:47
Original
1818 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich relevante Informationen zur Java-Synchronisation, zur asynchronen, blockierenden und nicht-blockierenden Analyse vorgestellt. Freunde, die sie benötigen, können sich auf

Java-Synchronisation, asynchrone, blockierende und nicht-blockierende Analyse beziehen

Zusammenfassung:

Unter normalen Umständen läuft unser Programm synchron und nicht blockierend. Allerdings werden unsere Programme immer einige zeitaufwändige Vorgänge haben, wie zum Beispiel komplexe Berechnungen (Finden von Primzahlen zwischen 1 und 1 Milliarde) und Vorgänge, die das Programm selbst nicht kontrollieren kann (IO-Vorgänge, Netzwerkanfragen). Methoden, die diese zeitaufwändigen Vorgänge umfassen, können als Blockierungsmethoden bezeichnet werden, und Aufgaben, die diese zeitaufwändigen Vorgänge umfassen, können als Blockierungsaufgaben bezeichnet werden. Blockieren und Nichtblockieren werden dadurch definiert, ob sie Zeit benötigen.

Wenn das Programm eine große Anzahl blockierender Vorgänge enthält, wirkt sich dies auf die Programmleistung aus. Das Vorhandensein einer Blockierung ist jedoch eine objektive Tatsache, und unser Programm kann dies nicht ändern. Die Antwort auf eine Netzwerkanfrage dauert für uns unmöglich, da der Server, der die Anfrage akzeptiert, möglicherweise vollständig ausgefallen ist unserer Kontrolle. Aber wir können die Art und Weise ändern, wie wir mit Blockierungen umgehen – blockierende Aufgaben asynchron behandeln. Die wichtigste Technologie zur Erzielung von Asynchronität ist Multithreading. Illustration:

Synchronisation und Asynchronität sind Timing-Konzepte. Synchronisierung bedeutet, dass nur eine Aufgabe gleichzeitig ausgeführt wird, während asynchron bedeutet, dass mehrere Aufgaben gleichzeitig ausgeführt werden.

Codebeispiel

Simulierte Netzwerkanfrage:

package com.zzj.asyn; 
 
public class HttpRequest { 
  private Callable callable; 
   
  public HttpRequest(Callable callable) { 
    this.callable = callable; 
  } 
   
  public void send(){ 
    // 模拟网络请求 
    try { 
      Thread.sleep(1000 * 5); 
    } catch (InterruptedException e) { 
      e.printStackTrace(); 
      Thread.currentThread().interrupt(); 
    } 
    // 回调 
    this.callable.call("Hello world!"); 
  } 
   
  public interface Callable{ 
    void call(String result); 
  } 
}
Nach dem Login kopieren

Blockierende Aufgaben synchron bearbeiten:

package com.zzj.asyn; 
 
import com.zzj.asyn.HttpRequest.Callable; 
 
/** 
 * 以同步的方式处理阻塞任务 
 * @author lenovo 
 * 
 */ 
public class App { 
  public static void main(String[] args) { 
    new HttpRequest(new Callable() { 
      @Override 
      public void call(String result) { 
        System.out.println("Thread:" + Thread.currentThread().getName()); 
        System.out.println("Message from remote server:" + result); 
      } 
    }).send(); 
    System.out.println("Thread " + Thread.currentThread().getName() + " is over!"); 
  } 
}
Nach dem Login kopieren

Ergebnis:

Thread:main 
Message from remote server:Hello world! 
Thread main is over!
Nach dem Login kopieren

Blockierende Aufgaben asynchron verarbeiten:

package com.zzj.asyn; 
 
import com.zzj.asyn.HttpRequest.Callable; 
 
/** 
 * 以异步的方式处理阻塞任务 
 * @author lenovo 
 * 
 */ 
public class App2 { 
  public static void main(String[] args) { 
    new Thread(new Runnable() { 
      @Override 
      public void run() { 
        new HttpRequest(new Callable() { 
          @Override 
          public void call(String result) { 
            System.out.println("Thread:" + Thread.currentThread().getName()); 
            System.out.println("Message from remote server:" + result); 
          } 
        }).send(); 
      } 
    }).start(); 
    System.out.println("Thread " + Thread.currentThread().getName() + " is over!"); 
  } 
}
Nach dem Login kopieren

Ergebnis:

Thread main is over! 
Thread:Thread-0 
Message from remote server:Hello world!
Nach dem Login kopieren


Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die Java-Synchronisation, asynchrone, blockierende und nicht blockierende grafische Codeanalyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage