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그런데 메소드가 들어오는 곳에 중단점을 추가했더니 실제로는 메인 스레드가 차단된 걸 발견했어요!
4. 해결
다양한 문제 해결, @Async가 적용되지 않음, 비동기 작업이 기본 스레드가 반환될 때까지 기다리며 효과적인 솔루션을 찾지 못했습니다.
나중에 동료가 디버그 기능에 의해 차단된 스레드일 수 있다고 상기시켜 주었습니다.
한번 해보자는 마음으로 디버그 구성을 찾았습니다
Edit중단점은 jvm을 차단하거나 현재 스레드를 차단하도록 선택할 수 있습니다. 기본값은 jvm을 차단하는 것입니다.
스레드를 일시 중단으로 선택하면 메인 스레드가 더 이상 차단되지 않습니다
위 내용은 Java 비동기 작업 구현 및 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

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

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

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

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

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

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

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


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

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

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

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