首页 > 其他分享 >虚拟线程简单用法

虚拟线程简单用法

时间:2023-08-16 15:12:23浏览次数:25  
标签:thread Thread virtual 用法 虚拟 线程 name

以下包含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);
});

标签:thread,Thread,virtual,用法,虚拟,线程,name
From: https://www.cnblogs.com/funkboy/p/17635118.html

相关文章

  • Java并发编程:实现高效、线程安全的多线程应用
    Java并发编程是开发高效、可扩展的多线程应用的关键。合理地利用多线程可以提高程序的性能和响应性,但同时也会引入线程安全的问题。本文将介绍Java并发编程的关键技巧,帮助读者实现高效、线程安全的多线程应用。 线程安全的数据结构和类Java提供了许多线程安全的数据结构和类,如Co......
  • $("选择器").on详细用法
    $("选择器").on(事件,函数)是jQuery中绑定事件的方法,其详细用法如下:"选择器":表示要绑定事件的元素,可以是元素的id、class、标签名、属性名等。事件:表示要绑定的事件类型,比如click、mouseover、keydown等。函数:表示要执行的事件处理函数,可以是匿名函数或者已经定义好的函数。......
  • [Microsoft Azure] 配置Azure App Service仅虚拟内网访问
    本文将介绍如何配置AzureAppService以仅允许虚拟内网访问,从而提高安全性和隐私性。我们将讨论配置过程的不同步骤以及注意事项,以便您可以轻松实现更安全的应用部署。 随着云计算的普及,越来越多的企业和开发者开始将其应用部署到云平台上。在这种情况下,如何确保应用安全性和......
  • VMware虚拟机桥接模式不能联网访问外网,NAT可以联网但本机不能访问虚拟机ping不通
    如果其他方法没有用可以试试这个方法问题NAT模式可以访问外网,但本地不能访问虚拟机桥接模式本地可以访问虚拟机,但虚拟机不能访问外网,不能联网解决管理>虚拟机设置>网络适配器>自定义>VMnet8(NAT模式)......
  • 关于CH32系列MCU SDI虚拟串口功能的使用
    该功能需要配合EVT对应例程以及对应WCH-LinkUtility工具使用,WCH-LinkUtility下载链接如下:https://www.wch.cn/downloads/WCH-LinkUtility_ZIP.html该功能目前仅支持以下型号MCU,如下图,且需要配合WCH-LinkE使用,具体可见WCH-Link使用说明5.2.11小节,WCH-Link使用说明下载链接如下:ht......
  • 什么是多线程中的上下文切换
    多线程中的上下文切换(ContextSwitching)是指在多任务(多线程)环境下,操作系统将当前线程的状态保存(上下文信息,如寄存器内容、程序计数器等)并切换到另一个就绪状态的线程的过程。上下文切换是实现多任务并发的基本机制之一,它允许多个线程在一个物理CPU上交替执行,从而实现了多线程并......
  • 直播平台源码优质平台技术:并行处理与线程优化的探索与实践
     面对日益火爆的新型互联网社交形式,直播平台源码APP作为一种实时的多媒体传输和交互方式,越来越受到用户的欢迎,直播平台源码APP能够吸引来大量的用户,并越来越受欢迎,也依托直播平台源码APP的优质平台技术,其中,为了能在处理用户任务能够做到实时性与流畅性,并行处理与线程优化技术被......
  • openCV虚拟环境的使用
    1.在Anaconda中安装opencv-3.4.1  1.安装virtualenvpipinstallvirtualenv-ihttps://pypi.tuna.tsinghua.edu.cn/simple 2.安装虚拟环境进入到你想安装虚拟环境的目录,进入到黑窗口.执行以下命令产生一个新的虚拟环境virtualenv<虚拟环境名字>2.1构建openc......
  • Python教程(9)——Python变量类型列表list的用法介绍
    (目录)在Python中,列表(list)是一种有序、可变的数据结构,用于存储多个元素。列表可以包含不同类型的元素,包括整数、浮点数、字符串等。实际上列表有点类似C++语言中的数组,但仅仅只是类似,和数组还是有点不一样的。列表非常适合利用顺序和位置定位某一元素,尤其是当元素的顺序或内容经常......
  • 对线程池的理解
    线程池是一种并发编程的技术,它是管理和重用线程的一种机制,能够有效地提高多线程应用程序的性能和资源利用率。线程池维护一组可重用的线程,可以分配任务给这些线程来执行,从而避免了频繁地创建和销毁线程,减少了系统开销。以下是我对线程池的一些关键理解:线程池的组成:线程池由线......