이 글은 주로 자바 동기화, 비동기, 차단, 비차단 분석 관련 정보를 소개합니다. 필요한 친구는
자바 동기화, 비동기, 차단 및 비차단 분석
요약:
일반적인 상황에서 우리 프로그램은 동기식 및 비차단 방식으로 실행됩니다. 그러나 우리 프로그램에는 복잡한 계산(10억에서 10억 사이의 소수 찾기)과 프로그램 자체가 제어할 수 없는 작업(IO 작업, 네트워크 요청)과 같이 항상 시간이 많이 걸리는 작업이 있습니다. 시간이 많이 걸리는 작업을 포함하는 메서드를 차단 메서드라고 하고, 시간이 많이 걸리는 작업을 포함하는 작업을 차단 작업이라고 합니다. 차단과 비차단은 시간이 걸리는지 여부에 따라 정의됩니다.코드 예
시뮬레이트된 네트워크 요청:
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!"); } }결과:
으아아앙
위 내용은 Java 동기화, 비동기, 차단 및 비차단 그래픽 코드 분석에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!