При каких обстоятельствах виртуальные потоки расширят количество базовых потоков-носителей?

В 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».

Другие вопросы по тегам