java fiber 如何使用
Java Fiber 的基本概念
Java Fiber 是一种轻量级线程(协程),由 Project Loom 引入,旨在简化并发编程。Fiber 由虚拟线程(Virtual Thread)支持,可以显著提高高并发应用的性能。
创建 Fiber
使用 Fiber 需要依赖 Project Loom 的 API。以下是一个简单的创建和启动 Fiber 的示例:

import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
public class FiberExample {
public static void main(String[] args) {
ThreadFactory factory = Thread.builder().virtual().factory();
try (var executor = Executors.newThreadPerTaskExecutor(factory)) {
executor.submit(() -> {
System.out.println("Running in a Fiber");
});
}
}
}
Fiber 的阻塞操作
Fiber 的优势在于可以高效处理阻塞操作(如 I/O),而不会占用操作系统线程。以下是一个模拟阻塞操作的示例:

import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
public class BlockingFiberExample {
public static void main(String[] args) {
ThreadFactory factory = Thread.builder().virtual().factory();
try (var executor = Executors.newThreadPerTaskExecutor(factory)) {
executor.submit(() -> {
System.out.println("Start blocking operation");
Thread.sleep(1000); // 模拟阻塞操作
System.out.println("Blocking operation completed");
});
}
}
}
Fiber 与异步编程结合
Fiber 可以与 CompletableFuture 结合使用,实现更灵活的异步编程:
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
public class AsyncFiberExample {
public static void main(String[] args) {
ThreadFactory factory = Thread.builder().virtual().factory();
try (var executor = Executors.newThreadPerTaskExecutor(factory)) {
CompletableFuture.runAsync(() -> {
System.out.println("Async task running in Fiber");
}, executor);
}
}
}
Fiber 的错误处理
Fiber 中的异常可以通过 try-catch 捕获,或通过 CompletableFuture 的异常处理机制处理:
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
public class FiberErrorHandling {
public static void main(String[] args) {
ThreadFactory factory = Thread.builder().virtual().factory();
try (var executor = Executors.newThreadPerTaskExecutor(factory)) {
CompletableFuture.runAsync(() -> {
try {
int result = 10 / 0; // 模拟异常
} catch (Exception e) {
System.out.println("Exception caught: " + e.getMessage());
}
}, executor);
}
}
}
注意事项
- 确保使用支持 Project Loom 的 JDK 版本(如 JDK 19+ 的早期访问版本)。
- Fiber 适用于高并发、I/O 密集型任务,但不适合 CPU 密集型任务。
- 避免在 Fiber 中频繁创建和销毁线程,尽量复用线程池。






