概要
以下、自分用のメモです。
いつのまにか Java 19 がリリースされていました。忘れないうちにメモメモ。。。
ついこないだ Java 17 が出た感じなのにw
Java 19 は、LTS版では無いので業務で採用されることは無いと思いますが、追加される機能などは目を通しておきたい。
今回の注目はやっぱり仮想スレッド(Virtual Thread)ですね。個人的には。
以下のように書くみたいですね。(https://openjdk.org/jeps/425 より引用)
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) { IntStream.range(0, 10_000).forEach(i -> { executor.submit(() -> { Thread.sleep(Duration.ofSeconds(1)); return i; }); }); } // executor.close() is called implicitly, and waits
10000個のVirtual Threadを起動して処理してるって感じ。
今までのOSスレッドを使う形で同じことをすると多分クラッシュします。
java.lang.Threadにも追加がおこなわれているみたいで(https://openjdk.org/jeps/425 より引用)
Thread.startVirtualThread(runnable)
で仮想スレッドを起動できるようになっている模様。
また、以下のようにも書けるようになる。(https://openjdk.org/jeps/425 より引用)
Thread thread = Thread.ofVirtual().name("duke").unstarted(runnable);
Thread thread = Thread.ofPlatform().name("duke").unstarted(runnable);
上が仮想スレッドで下が従来のOSスレッド。
また、仮想スレッドは常に デーモンスレッド で動作するとのこと。
Virtual threads are always daemon threads. The Thread.setDaemon(boolean) method cannot change a virtual thread to be a non-daemon thread.
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。