Quasar 라이브러리를 활용한 Java 코루틴 예제 (Maven 기반)

메인 스레드는 1부터 10까지의 무작위 정수를 생성하여 정수 채널에 전송하고, 이 과정을 반복하면서 각 반복 후 일정 시간 동안 대기합니다.

또한, 새로운 Fiber 코루틴을 생성하여 정수 채널에서 값을 지속적으로 수신하고, 수신된 값이 존재할 경우 이를 출력합니다.

Maven 의존성 설정

<!-- 코루틴 프레임워크 Quasar -->
<dependency>
    <groupId>co.paralleluniverse</groupId>
    <artifactId>quasar-core</artifactId>
    <version>0.7.10</version>
    <classifier>jdk8</classifier>
</dependency>

테스트 코드

import co.paralleluniverse.fibers.Fiber;
import co.paralleluniverse.fibers.SuspendExecution;
import co.paralleluniverse.strands.SuspendableRunnable;
import co.paralleluniverse.strands.channels.Channels;
import co.paralleluniverse.strands.channels.IntChannel;

import java.io.IOException;
import java.util.Random;
import java.util.concurrent.ExecutionException;

public class QuasarDemo {
    static void executeExample() {
        final IntChannel channel = Channels.newIntChannel(10);

        new Fiber<Void>(new SuspendableRunnable() {
            @Override
            public void run() throws SuspendExecution, InterruptedException {
                while (true) {
                    Integer value = channel.receive();
                    if (value != null && value != 0) {
                        System.out.println(String.format("수신됨: %s", value));
                    } else {
                        System.out.println("값 없음");
                    }
                }
            }
        }).start();

        startProducer(channel);

        while (true) {
            // 무한 루프 유지
        }
    }

    static void startProducer(IntChannel ch) {
        try {
            Random random = new Random();

            while (true) {
                int number = random.nextInt(10) + 1;
                ch.send(number);
                Thread.sleep(200 * number);
            }
        } catch (SuspendExecution | InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException, SuspendExecution, IOException {
        executeExample();
    }
}

Maven 패키지 경로 확인

  • Fiber 클래스로 이동하여 상위 디렉터리에서 quasar-core-0.7.10-jdk8.jar 파일을 찾습니다.
  • 파일 경로 복사:
    C:\Users\lenovo\.m2\repository\co\paralleluniverse\quasar-core\0.7.10\quasar-core-0.7.10-jdk8.jar
  • 실행 시 JVM 옵션에 아래 내용 추가:
    -javaagent:C:\Users\lenovo\.m2\repository\co\paralleluniverse\quasar-core\0.7.10\quasar-core-0.7.10-jdk8.jar
  • IDE 실행 설정에서 VM Options 항목에 위 경로를 입력합니다.

설정 후 테스트 코드를 실행하면 코루틴과 채널 간의 통신이 정상적으로 작동하는 것을 확인할 수 있습니다.

태그: java Quasar Fiber 코루틴 채널

9월 5일 11:32에 게시됨