虚拟线程简单用法
以下包含AI创作
- ExecutorService用法
 
 try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
        var future1 = executor.submit(() -> fetchURL(url1));
        var future2 = executor.submit(() -> fetchURL(url2));
        response.send(future1.get() + future2.get());
    } catch (ExecutionException | InterruptedException e) {
        response.fail(e);
    }
- 创建虚拟线程:可以通过Thread.Builder API来指定创建虚拟线程,以及其他一些选项。例如:
 
// create a virtual thread
Thread thread = Thread.ofVirtual().name("my-virtual-thread").start(() -> {
    // do some work
});
- 等待虚拟线程完成:可以通过CompletableFuture或其他异步机制来等待虚拟线程完成,而不是调用Thread.join()方法,因为它会阻塞本地线程。例如:
 
// create a virtual thread and return a CompletableFuture
CompletableFuture<Void> future = Thread.ofVirtual().name("my-virtual-thread").startAsync(() -> {
    // do some work
});
// wait for the virtual thread to complete
future.join();
- 取消或停止虚拟线程:可以通过其他方式来取消或停止虚拟线程,而不是调用Thread.interrupt()方法,因为它会导致不可预测的行为。例如:
 
// create a virtual thread and return a CompletableFuture
CompletableFuture<Void> future = Thread.ofVirtual().name("my-virtual-thread").startAsync(() -> {
    // do some work
});
// cancel the virtual thread
future.cancel(true);
- 使用定时器或延迟执行:可以使用ScheduledExecutorService或其他定时器来实现延迟执行,而不是调用Thread.sleep(long)方法,因为它会阻塞本地线程。例如:
 
// create a ScheduledExecutorService
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
// create a virtual thread and schedule it to run after 5 seconds
scheduler.schedule(Thread.ofVirtual().name("my-virtual-thread").task(() -> {
    // do some work
}), 5, TimeUnit.SECONDS);
- 使用Thread-local变量:可以使用java.lang.ThreadLocal类来创建和管理线程局部变量,与本地线程没有区别。不过,需要注意的是,虚拟线程之间的数据可能不一致,因为每个虚拟线程只能看到自己的变量副本,而不能看到其他虚拟线程的变量副本。例如:
 
// 创建一个ThreadLocal对象
private ThreadLocal<String> threadLocal = new ThreadLocal<String> ();
// 在虚拟线程中设置和获取线程局部变量的值
Thread thread = Thread.ofVirtual().name("my-virtual-thread").start(() -> {
    // 设置线程局部变量的值
    threadLocal.set("Hello, virtual thread!");
    // 获取线程局部变量的值
    String value = threadLocal.get();
    // 打印线程局部变量的值
    System.out.println(value);
});
                    
                
                
            
        
浙公网安备 33010602011771号