При каких обстоятельствах виртуальные потоки расширят количество базовых потоков-носителей?
В jep444 вижу "Реализации этих операций блокировки компенсируют захват потока ОС за счет временного расширения параллелизма планировщика". При каких обстоятельствах виртуальные потоки расширят количество базовых потоков-носителей?
Можете ли вы дать мне код, чтобы достичь этого?
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».