메인 스레드는 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 항목에 위 경로를 입력합니다.
설정 후 테스트 코드를 실행하면 코루틴과 채널 간의 통신이 정상적으로 작동하는 것을 확인할 수 있습니다.