提问人:FlyChenKai 提问时间:11/16/2023 更新时间:11/16/2023 访问量:49
在什么情况下,虚拟线程会扩展底层载体线程的数量?
Under what circumstances will virtual threads expand the number of underlying carrier threads?
问:
在 jep444 中,我看到“这些阻塞操作的实现通过临时扩展调度程序的并行性来补偿操作系统线程的捕获”。 在什么情况下,虚拟线程会扩展底层载体线程的数量?
你能给我一些代码来达到这个目的吗?
答:
0赞
FlyChenKai
12/1/2023
#1
public class CarrierThreadExpandTest {
public static void main(String[] args) throws InterruptedException {
ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor();
File file = new File("/Users/info.log");
for (int i = 0; i < 32; i++) {
executorService.execute(() -> {
while (true) {
try (FileInputStream fis = new FileInputStream(file)) {
int content;
while ((content = fis.read()) != -1) {
System.out.print((char) content);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
});
}
Thread.sleep(1000 * 60 * 60);
}
}
$ jps
$ jstack pid
查看“ForkJoinPool-1-worker-xx”线程。
评论
synchronized
阻止同步
内部的操作会导致固定 - 但是,我不认为 OP 是在询问固定,而是像文件 I/O 这样的东西会暂时增加池中的平台线程数。synchronized
synchronized
wait
synchronized
synchronized
synchronized
FileInputStream
synchronized
synchronized