当前位置: 首页 > news >正文

仪征市企业网站建设公司视频号的链接在哪

仪征市企业网站建设公司,视频号的链接在哪,网站常规seo优化步骤,做网站客户给不了素材I often take exercise. Why only yesterday I had breakfast in bed. 在Java 21中,引入了虚拟线程(Virtual Threads)来简化和增强并发性,这使得在Java中编程并发程序更容易、更高效。 虚拟线程,也称为“用户模式线程…

 I often take exercise. Why only yesterday I had breakfast in bed.

在Java 21中,引入了虚拟线程(Virtual Threads)来简化和增强并发性,这使得在Java中编程并发程序更容易、更高效。

虚拟线程,也称为“用户模式线程(user-mode threads)”或“纤程(fibers)”。该功能旨在简化并发编程并提供更好的可扩展性。虚拟线程是轻量级的,这意味着它们可以比传统线程创建更多数量,并且开销要少得多。这使得在自己的线程中运行单独任务或请求变得更加实用,即使在高吞吐量的程序中也是如此。

创建和使用虚拟线程

在Java 21中创建和使用虚拟线程有多种方法:

1. 使用静态构建器方法

Thread.startVirtualThread方法将可运行对象作为参数来创建,并立即启动虚拟线程,具体如下代码:

Runnable runnable = () -> {System.out.println("Hello, www.didispace.com");
};// 使用静态构建器方法
Thread virtualThread = Thread.startVirtualThread(runnable);

也可以使用Thread.ofVirtual()来创建,这里还可以设置一些属性,比如:线程名称。具体如下代码:

Thread.ofVirtual().name("didispace-virtual-thread").start(runnable);

2. 与ExecutorService结合使用

从Java 5开始,就推荐开发人员使用ExecutorServices而不是直接使用Thread类了。现在,Java 21中引入了使用虚拟线程,所以也有了新的ExecutorService来适配,看看下面的例子:

Runnable runnable = () -> {System.out.println("Hello, www.didispace.com");
};try (ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor()) {for (int i = 0; i < 100; i++) {executorService.submit(runnable);}
}

上述代码在try代码块中创建了一个ExecutorServices,用来为每个提交的任务创建虚拟线程。

3. 使用虚拟线程工厂

开发者还可以创建一个生成虚拟线程的工厂来管理,具体看下面的例子例子:

Runnable runnable = () -> {System.out.println("Hello, www.didispace.com");
};ThreadFactory virtualThreadFactory = Thread.ofVirtual().name("didispace", 0).factory();Thread factoryThread = virtualThreadFactory.newThread(runnable);
factoryThread.start;

这段代码创建了一个虚拟线程工厂,每个虚拟线程都会以didispace为前缀、以数字结尾(从0开始累加)的名称。

虚拟线程实现原理

虚拟线程是一种轻量级(用户模式)线程,这种线程是由Java虚拟机调度,而不是操作系统。虚拟线程占用空间小,任务切换开销几乎可以忽略不计,因此可以极大量地创建和使用。总体来看,虚拟线程实现如下:

virtual thread = continuation + scheduler

虚拟线程会把任务(一般是java.lang.Runnable)包装到一个Continuation实例中:

  • 当任务需要阻塞挂起的时候,会调用Continuationyield操作进行阻塞
  • 当任务需要解除阻塞继续执行的时候,Continuation会被继续执行

Scheduler也就是执行器,会把任务提交到一个载体线程池中执行:

  • 执行器是java.util.concurrent.Executor的子类
  • 虚拟线程框架提供了一个默认的ForkJoinPool用于执行虚拟线程任务

下文会把carrier thread称为"载体线程",指的是负责执行虚拟线程中任务的平台线程,或者说运行虚拟线程的平台线程称为它的载体线程

操作系统调度系统线程,而Java平台线程与系统线程一一映射,所以平台线程被操作系统调度,但是虚拟线程是由JVM调度。JVM把虚拟线程分配给平台线程的操作称为mount(挂载),反过来取消分配平台线程的操作称为unmount(卸载):

  • mount操作:虚拟线程挂载到平台线程,虚拟线程中包装的Continuation栈数据帧或者引用栈数据会被拷贝到平台线程的线程栈,这是一个从堆复制到栈的过程
  • unmount操作:虚拟线程从平台线程卸载,大多数虚拟线程中包装的Continuation栈数据帧会留在堆内存中

小结

上面我们介绍了虚拟线程的创建和使用,而我们大多数Java开发者都基于Spring来开发具体业务应用,所以很多场景下可能都不太涉及手工创建的操作。所以,对于虚拟线程的概念,你只需要有一个基本的认识。所以,在文章的最后,做一个小结,以方便大家理解和记忆:

  • 虚拟线程是由JVM管理的轻量级线程。
  • 虚拟线程不需要任何显式分配或调度。
  • 虚拟线程非常适合I/O密集型任务或需要大量并行性的任务。
  • 虚拟线程也可以用来实现异步操作。

另外,值得注意的是,虽然虚拟线程可以在并发性和可扩展性方面提供显着的帮助,但它们并不总是适合所有场景。有些需要大量计算的任务,并不一定在虚拟线程中运行更好,因为虚拟线程也有上下文切换的开。具体情况还是需要通过测试评测,以找到最优解。

 

http://www.hotlads.com/news/6305.html

相关文章:

  • 云南网站建设优化百度营销平台
  • 泉州网站建设开发免费投放广告的平台
  • 建设网站找哪里seo外链建设的方法
  • 四川省政府采购网招标官网潍坊seo招聘
  • 南山做网站公司电商seo
  • 域名主机 网站建设如何建网站教程
  • 嘉善在线做网站吗软文营销写作技巧
  • wordpress多站点管理百度公司的业务范围
  • 深圳找工作哪个网站最靠谱抖音seo软件工具
  • wordpress drupal 慢优化落实疫情防控
  • 寻找网络公司做公司网站升级改版嘉兴新站seo外包
  • 有没有专门做二手的网站直播营销策划方案范文
  • 单纯做seo能否提升网站流量淘宝客怎么做推广
  • 顺德做网站shundeit市场调研的基本流程
  • 广州市政府门户网站的网址是今日头条新闻发布
  • 西安网站建设xazxcy广东seo网络培训
  • 网站开发助理做什么电商网站设计
  • 提供网站建设课程报告今日军事新闻头条最新
  • 东莞做网站设计制作搜索引擎最新排名
  • 产品经理如何做p2p网站改版宁波免费seo在线优化
  • 网站建设丶seo优化谷歌浏览器安卓下载
  • 深圳住房和建设局网站融悦居网络营销的优势和劣势
  • 如何租用服务器做网站整站优化 mail
  • 游戏自助充值网站怎么做四种基本营销模式
  • 网站描述标签怎么写企业网站推广方案的策划
  • 福州企业建站服务江苏搜索引擎优化
  • 商务网站开发开题报告网站seo源码
  • 用php建设一个简单的网站爱站网工具
  • 民治专业做网站公司怎么自己做网址
  • 淄博高端网站品牌seo培训咨询