JDK21中,虚拟线程能够完全代替线程吗?
作者:卡卷网发布时间:2025-01-09 18:33浏览数量:81次评论数量:0次
<>JDK21的虚拟线程(VirtualThread)在生产环境中不建议使用,等下一个LTS版本。>
JDK21的实现,虚拟线程执行synchronized代码块可能会pin住线程。虚拟线程进入在synchronized代码块里被阻塞,执行虚拟线程的线程本应该切换执行其它虚拟线程,继续工作。但是JDK21的实现,在这种情况下并不能切换成其它虚拟线程,导致线程被阻塞。而JVM默认只会启用少量的线程来执行虚拟线程,可能导致(负责执行虚拟线程的)线程全部被阻塞,cpu啥都不执行,就傻等着。特别是等待IO响应等耗时的locking作。
如果代码里没有synchronized关键(可以是用ReentrantLock重写synchronized的代码),或者有synchronized关键字,但是synchronized代码里,没有长时间的阻塞调用,没有频繁的阻塞调用,这种情况下生产环境也可以使用虚拟线程。但是,这种情况一般难以保证。我们自己写的代码可以特别注意,但是很难保证其它组员,很难保证依赖的包里没有。
文档中关于虚拟线程synchronizedpinning问题的说明:CoreLiraries
END
免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。
相关推荐
最新文章
随机文章
广告位

你 发表评论:
欢迎