> Java > java지도 시간 > 자바 비동기 대기

자바 비동기 대기

PHPz
풀어 주다: 2024-08-30 15:10:03
원래의
1054명이 탐색했습니다.

Java 비동기 대기는 I/O 바인딩 작업을 수행하는 것으로 정의되며 애플리케이션 응답이 필요하지 않습니다. 이러한 함수는 작업 완료 시 실행되는 콜백이 필요하므로 일반적으로 파일 및 네트워크 작업에 사용됩니다. 또한 이 함수는 항상 값을 반환합니다. awake 키워드를 사용하면 일반 제어 흐름 문 내에서 비동기 호출이 사용되며 이는 비차단 코드입니다. 이번 주제에서는 Java async Wait에 대해 알아보겠습니다.

광고 이 카테고리에서 인기 있는 강좌 JAVA MASTERY - 전문 분야 | 78 코스 시리즈 | 15가지 모의고사

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

구문

async/await의 일반적인 서명은 다음과 같습니다.

async void test() {
print('Welcome to EDUCBA');
}
로그인 후 복사

기다림은 계속됩니다

const test=async() =>
{
await test ();
Print ("completed");
}
로그인 후 복사

Java에서 async-await 기능은 어떻게 작동하나요?

비동기 대기 기능은 코드 뒤에서 비동기 작업을 수행하는 동안 동기 코드를 작성하는 데 도움이 됩니다. 그리고 async 키워드가 필요합니다. 그리고 다음은 비동기 코드를 정상적으로 실행하고 다음 코드 줄로 진행하라는 기다리고 있는 부분입니다. 새로운 연산자 "Await"는 비동기 함수 내에서 사용될 때 실행 중인 프로세스를 해결하기 위한 약속을 자동으로 기다립니다. 그러나 다른 경우에 사용하면 구문 오류가 발생합니다.

오류 처리 중 오류가 발생하면 비동기 함수의 Promise가 거부됩니다. 해당 함수가 값을 반환하면 약속이 해결됩니다. 이 비차단 코드는 별도의 스레드에서 실행되며 작업 완료 또는 실패를 기본 스레드에 알립니다. Try-catch는 오류를 동기식으로 처리하기 위해 함수에서 사용됩니다. 다음과 같이 시작하는 샘플을 살펴보겠습니다.

async function hello() {
//process waiting
await new Promise(res => setTimeout(res, 2000));
// Rejection with 20 %
if (Math.random() > 0.2) {
throw new Error('Check the number.')
}
return 'number';
}
로그인 후 복사

위 코드는 hello() 함수가 비동기식이라고 말하고 숫자를 반환하여 이를 해결하고 숫자를 확인하여 오류를 발생시킵니다.

다음으로, wait와 return을 함께 사용하여 프로세스를 일시 중지합니다

async function miss() {
try {
return await hello();
} catch (e) {
return 'error caught';
}
}
로그인 후 복사

이 기능을 사용한 더 나은 연결은 다음과 같습니다.

async function promise1( req,res)
{
try
{
let a=await a.get(req,uid);
let b=await cart.get (yser,uid);
Res.send(await dosome(a,cart));
}
catch (err)
{
res.send(err);
}
}
로그인 후 복사

여기서 wait 키워드는 오류를 잡기 전에 get() 함수가 완료되도록 지시합니다.

이 Completable future를 사용하면 future 객체를 반환합니다. 이 Completable future는 비동기 계산에 대한 참조이며 미래를 구현합니다.

private static CompletableFuture<Void> hello{
try {
String intermediate = await(doA());
String res = await(doB(intermediate));
reportSuccess(res);
} catch (Throwable th) {
reportFailure(th);
}
return completedFuture(null);
}
로그인 후 복사

Java 비동기 대기의 예

그래서 이 섹션에서는 async 및 Wait의 세부적인 사항이 어떻게 작동하는지 살펴보겠습니다.

예시 #1

코드:

import 'dart:async';
void main() async {
var a = await ten();
print(a);
}
Future<int> ten() async {
return 10;
}
로그인 후 복사

설명

위 코드는 Java 7 버전 API인 future를 사용하고 10이 표시될 때까지 10초를 기다립니다.

출력:

자바 비동기 대기

예시 #2

코드:

import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
class Comput1 implements Runnable
{
public static int item = 0;
public void run()
{
item = 3 * 3;
try
{
CyclicBarrierAwaitExample2.newBarrier.await();
}
catch (InterruptedException | BrokenBarrierException e)
{
e.printStackTrace();
}
}
}
class Comput2 implements Runnable
{
public static int total = 0;
public void run()
{
// check if newBarrier is broken or not
System.out.println("Is it broken? - " + CyclicBarrierAwaitExample2.newBarrier.isBroken());
total = 20 + 20;
try
{
CyclicBarrierAwaitExample2.newBarrier.await(2000, TimeUnit.MILLISECONDS);
System.out.println("Number of rooms waiting at the barrier "+
"here = " + CyclicBarrierAwaitExample2.newBarrier.getNumberWaiting());
}
catch (InterruptedException | BrokenBarrierException e)
{
e.printStackTrace();
}
catch (TimeoutException e)
{
e.printStackTrace();
}
}
}
public class CyclicBarrierAwaitExample2 implements Runnable
{
public static CyclicBarrier newBarrier = new CyclicBarrier(3);
public static void main(String[] args)
{
CyclicBarrierAwaitExample2 test = new CyclicBarrierAwaitExample2();
Thread t = new Thread(test);
t.start();
}
@Override
public void run()
{
System.out.println("Number of parties required to trip the barrier = "+
newBarrier.getParties());
System.out.println("Sum of product and sum = " + (Comput1.item +
Comput2.total));
Comput1 comp1 = new Comput1();
Comput2 comp2 = new Comput2();
Thread t = new Thread(comp1);
Thread t2 = new Thread(comp2);
t.start();
t2.start();
TimeUnit unit = TimeUnit.SECONDS;
try
{
CyclicBarrierAwaitExample2.newBarrier.await(1,unit);
}
catch (InterruptedException | BrokenBarrierException | TimeoutException e)
{
e.printStackTrace();
}
System.out.println("Sum of item and total = " + (Comput1.item +
Comput2.total));
newBarrier.reset();
System.out.println(" reset successful");
}
}
로그인 후 복사

설명

다른 스레드가 작업을 처리하는 동안 값이 합산됩니다.

출력:

자바 비동기 대기

예시 #3

코드:

import java.util.*;
import java.util.concurrent.*;
public class Async {
static List<Task> tasks = new ArrayList<>();
static ExecutorService executor = Executors.newScheduledThreadPool(3);
public static void main(String[] args) {
createTasks();
executeTasks();
}
private static void createTasks() {
for (int k= 0; k < 10; k++) {
tasks.add(new Task(k));
}
}
private static void executeTasks() {
for (Task task : tasks) {
executor.submit(task);
}
}
static class Task extends Thread {
int n;
public void run() {
try {
Thread.sleep(new Random (). nextInt (1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
printNum();
}
private void printNum() {
System.out.print(n + " ");
}
public Task(int n) {
this.n = n;
}
}
}
로그인 후 복사

설명

위 코드는 스레드 값, 즉 작업자 스레드를 할당하여 작업을 시작합니다. 여기서는 print numb() 함수에서 동기 작업을 중지합니다. 따라서 출력은 다음과 같습니다.

출력:

자바 비동기 대기

예 #4 – 시간 초

Async.html

<html>
<meta charset="utf-8"/>
<body> Understanding JavaScript Program Execution</br>
<script type="text/javascript">
function tensec()
{
return new Promise((resolve,reject)=>{ setTimeout(() => {
console.log('EDUCBA PAge -I take 20 second');
resolve();
}, 10000);
});
}
async function run()
{
console.log('EDUCBA PAge : Page executed immediately');
await tensec();
console.log('EDUCBA PAge : Next process');
}
run();
</script>
</body>
</html>
로그인 후 복사

설명

위 코드는 약속을 실행하고 async-await의 도움으로 대기 시간 간격을 표시합니다. 예를 들어 위 스크립트는 작업이 완료될 때까지 20초 동안 기다립니다.

출력:

자바 비동기 대기

결론

마지막에는 비동기 코드 작성이 조금 더 어렵고, 가장 중요한 것은 약속이 지연된 실행 흐름을 정의하는 일반적인 방법이라는 것입니다. 이 기사에서는 동기처럼 보이는 비동기 코드를 작성하는 방법을 배웠습니다. 복잡한 코드에서는 비동기를 사용하는 것이 더 중요했습니다. JavaScript 개발자는 이 개념을 많이 이해해야 합니다.

위 내용은 자바 비동기 대기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿