いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Java 19 がリリース (LTSではない)

概要

以下、自分用のメモです。

いつのまにか Java 19 がリリースされていました。忘れないうちにメモメモ。。。

ついこないだ Java 17 が出た感じなのにw

Java 19 は、LTS版では無いので業務で採用されることは無いと思いますが、追加される機能などは目を通しておきたい。

www.publickey1.jp

forest.watch.impress.co.jp

qiita.com

jdk.java.net

openjdk.org

今回の注目はやっぱり仮想スレッド(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.


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。