Cet article présente principalement des informations pertinentes sur la synchronisation Java, l'analyse asynchrone, bloquante et non bloquante. Les amis qui en ont besoin peuvent se référer à
synchronisation Java, analyse asynchrone, bloquante et non bloquante<.>
Résumé :
Dans des circonstances normales, notre programme s'exécute de manière synchrone et non bloquante. Cependant, nos programmes comporteront toujours des opérations chronophages, comme des calculs complexes (trouver des nombres premiers entre 1 et 1 milliard) et des opérations que le programme lui-même ne peut pas contrôler (opérations d'E/S, requêtes réseau). Les méthodes qui incluent ces opérations fastidieuses peuvent être appelées méthodes de blocage, et les tâches qui incluent ces opérations chronophages peuvent être appelées tâches de blocage. Le blocage et le non-blocage sont définis selon qu'ils prennent ou non du temps.Exemple de code
Demande de réseau simulée :
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); } }
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!"); } }
Thread:main Message from remote server:Hello world! Thread main is over!
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!"); } }
Thread main is over! Thread:Thread-0 Message from remote server:Hello world!