Java synchronization, asynchronous, blocking and non-blocking analysis
This article mainly introduces the relevant information of java synchronization, asynchronous, blocking and non-blocking analysis. Friends who need it can refer to
java synchronization, asynchronous, blocking and non-blocking analysis
Summary:
Under normal circumstances, our program runs in a synchronous and non-blocking manner. However, our programs will always have some time-consuming operations, such as complex calculations (finding prime numbers between 1 and 1 billion) and operations that the program itself cannot control (IO operations, network requests). Methods that include these time-consuming operations can be called blocking methods, and tasks that include these time-consuming operations can be called blocking tasks. Blocking and non-blocking are defined by whether they take time.
If there are a large number of blocking operations in the program, it will affect program performance. But the existence of blocking is an objective fact, and our program cannot change it. A network request takes 3 seconds to respond. It is impossible for us to make it respond in 1 millisecond, because the server that accepts the request may be completely out of our control. But we can change the way we handle blocking - handle blocking tasks asynchronously. The main technology to achieve asynchronous is multi-threading. Illustration:
# Synchronization and asynchronousness are timing concepts. Synchronization means executing only one task at the same time, while asynchronous means executing multiple tasks at the same time.
Code example
Simulated network request:
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); } }
Handle blocking tasks synchronously:
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!"); } }
Result:
Thread:main Message from remote server:Hello world! Thread main is over!
Process blocking tasks asynchronously:
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!"); } }
Result:
Thread main is over! Thread:Thread-0 Message from remote server:Hello world!
Thank you for reading, I hope it can help everyone, thank you for your support of this site!
For more articles related to java synchronization, asynchronous, blocking and non-blocking analysis, please pay attention to the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Field mapping processing in system docking often encounters a difficult problem when performing system docking: how to effectively map the interface fields of system A...

When using MyBatis-Plus or other ORM frameworks for database operations, it is often necessary to construct query conditions based on the attribute name of the entity class. If you manually every time...

Analysis of memory leak phenomenon of Java programs on different architecture CPUs. This article will discuss a case where a Java program exhibits different memory behaviors on ARM and x86 architecture CPUs...

Start Spring using IntelliJIDEAUltimate version...

Troubleshooting and solutions to the company's security software that causes some applications to not function properly. Many companies will deploy security software in order to ensure internal network security. ...

Discussing the hierarchical architecture problem in back-end development. In back-end development, common hierarchical architectures include controller, service and dao...

Questions and Answers about constant acquisition in Java Remote Debugging When using Java for remote debugging, many developers may encounter some difficult phenomena. It...

How to convert names to numbers to implement sorting within groups? When sorting users in groups, it is often necessary to convert the user's name into numbers so that it can be different...
