当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-JDK19中的大杀器:虚拟线程,到底是什么?

金三银四精选java面试题-JDK19中的大杀器:虚拟线程,到底是什么?

来源:图灵教育
时间:2023-12-27 10:09:02
 

JDK19中的大杀器:虚拟线程,到底是什么?

JDK19中的虚拟线程就是业界的协程。

 

因为协程是用户态的,线程是操作系统内核态的,所以协程仍然基于的是线程,一个线程可以承载多个协程,但如果所有协程都只基于一个线程,那样效率肯定会不高,所以JDK19中协程会基于ForkJoinPool线程池,利用多个线程来支持协程的运行,并且利用ForkJoinPool,而不是普通的ThreadPoolExecutor,可以支持大任务的拆分。

 

JDK19中的协程底层是基于ForkJoinPool的,相当于,我们在利用协程执行Runnable时,底层会把Runnable提交到一个ForkJoinPool中去执行,我们可以通过:

  • -Djdk.virtualThreadScheduler.parallelism=1
  • -Djdk.virtualThreadScheduler.maxPoolSize=1

这两个参数来设置ForkJoinPool的核心线程数和最大线程数:

  • parallelism默认为Runtime.getRuntime().availableProcessors()
  • maxPoolSize默认为256

 

ForkJoinPool中的线程在执行任务过程中,一旦线程阻塞了,比如sleep、lock、io操作时,那么这个线程就会去执行ForkJoinPool中的其他任务,从而可以做到一个线程在执行过程中,也能并发的执行多个任务,达到协程并发执行任务的效果。