찾다
Javajava지도 시간Java 비동기 작업 구현 및 분석

1. 비동기 작업이란

실생활에서든 프로그램에서든 크게 동기식과 비동기식의 두 가지 유형으로 나눌 수 있습니다.

동기화: 예를 들어 하이디라오를 먹으러 가면 냄비 바닥을 먼저 주문한 다음 접시를 주문하고 웨이터가 냄비 바닥을 가져온 다음 접시를 가져오고 마지막으로 접시를 먹을 수 있습니다. . 이 과정은 순서대로 이루어져야 합니다.

비동기 작업: 하이디라오 먹으러 가세요. 식사하는 사람이 많아요. 앞에 사람이 많아서 줄을 서서 기다려야 할 수도 있습니다. 그런데 도중에 화장실에 가고 싶다면 돌아올 때 다시 줄을 서야 합니다. 그래서 전화 시스템이 있습니다. 먼저 전화번호를 받기 위해 줄을 서서 마사지를 받고, 영화를 보고, 스파에 가고, 밀크티 한 잔을 사면 됩니다. 드디어 당신의 차례가 되었는데, 이때 줄을 서 있다는 알림을 받은 후 입장할 수 있습니다. 이 프로세스는 비동기식입니다. 2. SpringBoot + Async

처음에는 스레드 풀을 열고 작업을 스레드 풀에 던져 완료하려고 생각했습니다.

나중에 SpringBoot에는 더 편리한 비동기 프레임워크 Async가 있다는 것을 기억했습니다

코드도 매우 간단합니다. 비동기 실행이 필요한 메서드에 @Async를 추가하고 SpringBoot 시작 클래스에 @EnableAsync를 추가하기만 하면 됩니다

    @Async
    public void task() {
        // do something
    }

3. Step Pitfall Diary

코드의 양이 작아도 코드 양이 줄어든다고 해서 Pitfall은 줄어들지 않습니다.

편의를 위해 로컬 데모를 구축하고 코드를 직접 입력했습니다

@RestController
public class AsyncController {
    @Autowired
    private AsyncService asyncService;

    @GetMapping("/v1/say")
    public String sayV1() {
        asyncService.sayV1();
        return "success1";
    }

    @GetMapping("/v2/say")
    public String sayV2() {
        asyncService.sayV2();
        return "success2";
    }
}
@Service
public class AsyncService {
    public void sayV1() {
        try {
            Thread.sleep(3000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("hello world");
    }

    @Async
    public void sayV2() {
        try {
            Thread.sleep(3000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("hello world");
    }
}

동기 실행용과 비동기 실행용 /v1/say 및 /v2/say 두 가지 인터페이스를 제공하는 매우 간단한 데모입니다. 3초 동안 시간이 많이 걸리는 작업을 시뮬레이션합니다.

정상적으로 시작합니다. 동기적으로 실행하면 3초 동안 기다렸다가 비동기적으로 실행하면 즉시 반환됩니다. 중단점 이후에 추가하면 문제가 발생했습니다.

먼저 hello world를 인쇄하는 라인에 중단점을 추가했습니다. 인쇄 전에 차단된다는 점을 제외하면 효과는 원본과 동일하지만 메인 스레드의 반환에는 영향을 미치지 않습니다.

Edit

Java 비동기 작업 구현 및 분석그런데 메소드가 들어오는 곳에 중단점을 추가했더니 실제로는 메인 스레드가 차단된 걸 발견했어요!

Edit

Java 비동기 작업 구현 및 분석4. 해결

다양한 문제 해결, @Async가 적용되지 않음, 비동기 작업이 기본 스레드가 반환될 때까지 기다리며 효과적인 솔루션을 찾지 못했습니다.

나중에 동료가 디버그 기능에 의해 차단된 스레드일 수 있다고 상기시켜 주었습니다.

한번 해보자는 마음으로 디버그 구성을 찾았습니다

Edit

Java 비동기 작업 구현 및 분석중단점은 jvm을 차단하거나 현재 스레드를 차단하도록 선택할 수 있습니다. 기본값은 jvm을 차단하는 것입니다.

스레드를 일시 중단으로 선택하면 메인 스레드가 더 이상 차단되지 않습니다

위 내용은 Java 비동기 작업 구현 및 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 亿速云에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
Java 플랫폼 독립성 : OS의 차이점Java 플랫폼 독립성 : OS의 차이점May 16, 2025 am 12:18 AM

다양한 운영 체제에서 Java의 성능에 미묘한 차이가 있습니다. 1) JVM 구현은 핫스팟 및 OpenJDK와 같은 성능 및 쓰레기 수집에 영향을 미칩니다. 2) 파일 시스템 구조 및 경로 분리기는 다르므로 Java 표준 라이브러리를 사용하여 처리해야합니다. 3) 네트워크 프로토콜의 차별적 구현은 네트워크 성능에 영향을 미칩니다. 4) GUI 구성 요소의 외관과 동작은 시스템마다 다릅니다. 표준 라이브러리 및 가상 기계 테스트를 사용하면 이러한 차이의 영향을 줄이고 Java 프로그램을 통해 원활하게 실행할 수 있습니다.

Java의 가장 좋은 기능 : 객체 지향 프로그래밍에서 보안에 이르기까지Java의 가장 좋은 기능 : 객체 지향 프로그래밍에서 보안에 이르기까지May 16, 2025 am 12:15 AM

javaoffersrobustobject-eientedprogramming (OOP) 및 top-notchsecurityfeatures.1) oopinjavaincludesclasses, 객체, 상속, 다형성, 및 캡슐화, 2) inablingflexibleantaintainableystems.2) secere-featecludejavirtmachine (jVM)

JavaScript 대 Java를위한 최고의 기능JavaScript 대 Java를위한 최고의 기능May 16, 2025 am 12:13 AM

javaScriptandjavahavedistInctStrengths : javaScriptexcelsindynamictypingandasynchronousprogramming, whilejavaisrobustwithstrongoopandtyping.1) javaScript'sdynamicnatureallowsforrapiddevelopmentand prothotyping, withasync/withasynon-blockingi/o.2)

Java 플랫폼 독립성 : 혜택, 제한 및 구현Java 플랫폼 독립성 : 혜택, 제한 및 구현May 16, 2025 am 12:12 AM

javaachievesplatforminccendenceThermeThoughthejavavirtualMachine (JVM) 및 BYTECODE.1) thejvmGretsByTecode, thesAmeCodetorUnonOnonAnyPlatFormwithajvm.2) bytecodeiscomeDeDfromjavasourcodeanDisplatform-howhowhowhownectection, howludection, howludectionnectection

Java : 실제 단어의 플랫폼 독립성Java : 실제 단어의 플랫폼 독립성May 16, 2025 am 12:07 AM

java'splatforminccendenceMeansapplicationsCannonanyplatformwithajvm, "WriteOnce, Runanywhere"를 활성화하지만, 도전적인 jvminconsistencies, libraryportability 및 andperformancevariations.toaddressthese : 1) Usecross-platformtestingtools, 2).

JVM 성능 대 기타 언어JVM 성능 대 기타 언어May 14, 2025 am 12:16 AM

JVM 'sperformanceIscompetitive, ontotherRuntimes, 안전 및 생산성을 제공합니다

Java 플랫폼 독립성 : 사용의 예Java 플랫폼 독립성 : 사용의 예May 14, 2025 am 12:14 AM

javaachievesplatformincendenceThermeThoughthejavavirtualMachine (JVM), codeiscompiledintobytecode, notmachine-specificcode.2) bytecodeistredbythejvm, anblingcross- shoughtshoughts

JVM 아키텍처 : Java Virtual Machine에 대한 깊은 다이빙JVM 아키텍처 : Java Virtual Machine에 대한 깊은 다이빙May 14, 2025 am 12:12 AM

thejvmisanabstractcomputingmachinecrucialforrunningjavaprogramsduetoitsplatform-independentarchitection.itincludes : 1) classloaderforloadingclasses, 2) runtimeDataAreaFordatorage, 3) executionEnginewithgringreter, jitcompiler 및 ggarocubucbugecutec

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는