Javaのバーチャルスレッドを利用してみた(3)感想とゲーム利用の有効性について考察

はじめに

前回の「Javaをexe化してみる(2)- jpackageの活用 と 自動化バッチの紹介 -」に続いて、
ちょっとだけディープな「中身」のお話を。

最新のJava(21以降)を使うと、プログラムがどんなふうに動いてくれるのか。
進化し続けている、Javaを紹介しちゃいますね。

気づかせてくれるのは、Gemini3ちゃんなんだけどね。

1. JavaのスレッドはOSのスレッドで動く!

これまでスレッドって「なんとなくの処理の集まり」くらいに思っていたけれど、
実は今のJavaは、PCの中にある**「CPUコア(計算機)」に直結**して動いていることを知りました。

漠然と「スレッド」というものを理解していましたが、ちゃんと紐づいている。
知りませんでした。

「1つの処理(スレッド)は、常に1つのコアが担当する」 これが基本的なルールなんだそうです。

2.もっと有効的に使おう!バーチャルスレッド!

上記のように1:1で対応するというのが基本の考えで、
Javaであろうと、1スレッド1CPUの考えは変わらないそうです。

たとえば、今回のように数千の天体があって、個別にスレッドを割り当てている場合ならば、
数千スレッドがCPUに割り当てられるとか。

その考え方を変えて、キャリアスレッドというものが、一度引き受けて、論理的なスレッドにしているらしいです。
CPUに対して数千スレッドを作るわけではなく、その数千スレッドはJavaで振り分けをして、
CPUに対する負荷を下げよう。という試みみたいです。

3. 暇なコアを作らない!賢い仕事分散をするよ!

今のCPUはコアがたくさんありますが、中には「重い処理」でハマっちゃうコアも出てきます。
そこでJavaの最新機能が本領発揮!

基本は順番待ち

基本的には自分の担当するコアでお行儀よく並びます。

暇なコアが助けに来る

「あっちのコア、ハマってるな。暇だから手伝ってやるよ!」

暇になったコアが、忙しいコアの行列の**「後ろ」から**ガバっと!勝手に仕事を奪い取って、代わりに処理を始めちゃうんです。
これ、「ワークスティーリング(仕事泥棒)」って名前がついているらしいです。
名前はちょっと・・・ですが、おかげで全コアが働いてくれて、効率的に仕事をしてくれるようになるそうです。

アップデートが必要なきん

なかなかJavaのアップデートについていけないわたし、きん。

よりよくなっている屋台骨?土台?そこにもスポットライトを当てて、今後も紹介していけたらと思っています。

もしかしたら・・・

シューティングゲーム編で、1スレッドでかなり重い処理を割り当てているので、見直してみようかな・・・

と思っている次第です。

やる気になったら、やってみますね~。

(蛇足)「効率」をとるか「順番」をとるか

「後ろから奪ったら、順番が入れ替わっちゃうんじゃない?」 鋭い人ならそう思うはず。はい、その通りなんです!
でも、今のJavaはこう割り切っています。
「銀行の振込みたいに順番が命の処理は、今まで通り丁寧にやろう。」
「でも、シミュレーターの計算みたいに大量の処理は、少しくらい順番が前後しても、全コアを使って速く終わらせるほうがいいよね!」
だそうです。(Gemini3ちゃん談)

さいごに

どちらかというと、フロントエンド側で語られることは少ないJava。
でも、使い方次第で、使えるんだよ。って再認識させられる。

わたし自身が一番の推しがJavaってことがあるけれど、
(30年くらいやってるからね・・・)
(最近はフロントエンド側はJavaScriptベースだけどねー。わたしは)
まーまったりと紹介できたら~♪と思っています。

今回の記事まとめ

Javaで太陽系天体シミュレーター&JavaをExe化してみました。(Java21以降対応)
Javaをexe化してみる(2)- jpackageの活用 と 自動化バッチの紹介 -
Javaのバーチャルスレッドを利用してみた(3)感想とゲーム利用の有効性について考察

Youtubeに載せました♪
https://youtu.be/NPsgNbhEtds

シェアしていただけるとうれしいです。

Javaをexe化してみる(2)- jpackageの活用 と 自動化バッチの紹介 -

前回の「(1)」では概要をお伝えしましたが、
今回は実際に配布可能なExeファイルを作るための「自動化バッチ」の中身を詳しく解説します。

1. なぜ「jpackage」なのか?

Java 14から導入された jpackage は、**「実行環境(JRE)を同梱できる」**点にあります。

以前のようにユーザーに「Javaをインストールしてください」とお願いする必要がなく、
配布したフォルダ内のexeを叩くだけで動く、現代的な配布形態が可能です。

ただ、ファイルサイズがけっこう大きくなります。

2. ビルドを行うバッチファイル(makeExe.bat)

私が今回のシミュレーターで使用したバッチファイルを紹介します。


@echo off
setlocal
echo === Java EXE Build System (JDK 25) ===

REM (1)事前準備
REM 環境変数で一括管理
REM 自分自身の環境に合わせて修正してください
echo [1-1] 環境変数設定...
set JAVA_HOME=C:\Java\jdk-25.0.1
set APP_NAME=SolarSystemSim
set MAIN_CLASS=SolarSystemSim
set VERSION=1.0.0

REM 必要なフォルダを作成
echo [1-2] フォルダ作成...
if not exist "out" mkdir "out"
if not exist "dist" mkdir "dist"
if not exist "release" mkdir "release"

REM (2)コンパイル
echo [2] コンパイル中...
"%JAVA_HOME%\bin\javac" ^
  -d out *.java

REM (3)「dist」フォルダへjarファイルを集約
echo [3] distフォルダ構築 jarファイル作成中。
echo Main-Class: %MAIN_CLASS% > manifest.txt
"%JAVA_HOME%\bin\jar" cvfm dist\%APP_NAME%.jar manifest.txt -C out .

REM (4)パッケージング。EXE化
echo [4] パッケージ作成中 (app-image)...
"%JAVA_HOME%\bin\jpackage" ^
  --name "%APP_NAME%" ^
  --type app-image ^
  --win-console ^
  --input dist ^
  --dest "release" ^
  --main-jar "%APP_NAME%.jar" ^
  --main-class "%MAIN_CLASS%" ^
  --vendor "KIN"

echo === 全工程完了! release\%APP_NAME% 内の %APP_NAME%.exe を実行してください ===
pause

3. ポイント解説

jar化は必須

jpackageはJARファイルを入力として受け取るため、この工程は必須です。
この際、マニフェストファイルを使用して、アプリの起動地点(Main-Class)を明示するのがポイントです。

–type app-image

インストーラーではなく、実行に必要なファイル群を一つのフォルダにまとめます。ポータブルに持ち運びたい場合に最適です。
インストーラにしたい場合は、
–type exe
–type msi
にしてください。
わたしはインストールするまではちょっと・・・って感じでフォルダにまとめるところまでにしています。

–win-console の役割

これを入れると、アプリ(exe)を起動した瞬間に、背後で「コマンドプロンプト(黒い画面)」が一緒に立ち上がるようになります。

入れるメリット(デバッグ用):

プログラムの中で System.out.println(“天体の計算開始…”); のように書いているメッセージが、その黒い画面にリアルタイムで表示されます。
もしエラーで落ちた時も、そこにエラーメッセージ(スタックトレース)が残るので、「なぜ動かないのか」を突き止めるのに必須です。

入れないメリット(製品用):

純粋にシミュレーターの画面だけがポーンと立ち上がります。
一般ユーザーからすると「余計な黒い画面が出ない」ので、見た目がスッキリして「完成品」っぽく見えます。
デバッグが済んだら、取っちゃう方がスマートでしょうね~。

今回の記事まとめ

Javaで太陽系天体シミュレーター&JavaをExe化してみました。(Java21以降対応)
Javaをexe化してみる(2)- jpackageの活用 と 自動化バッチの紹介 -
Javaのバーチャルスレッドを利用してみた(3)感想とゲーム利用の有効性について考察

Youtubeに載せました♪
https://youtu.be/NPsgNbhEtds

シェアしていただけるとうれしいです。

Javaで太陽系天体シミュレーター&JavaをExe化してみました。(Java21以降対応)

Javaで太陽系天体シミュレーターを作成して、その後、Exe化してみました。
(下の方にダウンロードリンクがあります)

シミュレーターのほとんどは、Gemini3くんに手伝ってもらいましたが(笑)、
何時間もかけて調整を行って、なんとなく自分的にいい感じになりました。

実際の縮尺や時間からはかなり調整をかけています。
見ていて楽しめるように調整をしています。

画面イメージ

SolarSystemSim

見せどころ

初期のシミュレーターからいろいろとお願いをしてみました。
1)天体名が分かるようにスペースキーで表示するようにしました。
2)上下左右キーで拡大/縮小/時間調整ができます。
3)惑星および有名な準惑星をプロットしてみました。
4)主な彗星をプロットしてみました。名もない彗星もランダムに置いています。
5)エッジワースカイパーベルト、散乱円盤、オールトの雲もイメージ化しています。
6)シューメーカー・レヴィ第9彗星を蘇らせています。
詳しくは知らなかったですが、木星の重力圏にとらえられて、最後は分解・飲み込まれたみたいですね。
その重力圏にとらわれたイメージにしています。ぶつかりはしません。
7)見えるものではないですが、Java21から対応されているVirtual Threadを利用して、リソースを省力化しています。
なので、Java21以降対応になります。

Virtual Threadの採用について

わたしも今回初めて知ったVirtual Threadを採用しています。
数千の天体一つひとつが独立して計算を行い
(バーチャルスレッド。すべての天体が別のスレッドで動いています)
かつ メインの描画スレッドを邪魔しないスムーズな挙動を実現しています。
Javaで実現した『並列処理の宇宙』をぜひ体験してください。

JavaのExe化

前回のExe化はJavaFXとパッド対応まで含めて対応しましたが、
今回はピュアJavaで試してみました。

Exe化したバッチファイルは、
添付のzipファイル内の
makeExe.bat
を見てくださいね。

今回の記事まとめ

Javaで太陽系天体シミュレーター&JavaをExe化してみました。(Java21以降対応)
Javaをexe化してみる(2)- jpackageの活用 と 自動化バッチの紹介 -
Javaのバーチャルスレッドを利用してみた(3)感想とゲーム利用の有効性について考察

Youtubeに載せました♪
https://youtu.be/NPsgNbhEtds

シェアしていただけるとうれしいです。

JavaFXシューティングゲーム編 - EXE起動できるようにしてみました!!!!!

虎の巻のページにEXE起動に取り組んだ企画を追加しました!

https://kinchannn.jp/java-programing-toranomaiki/

Javaの環境ない人も動くはずです。
下にモジュールを公開するので試してみてください!

けっこう大変でした~。
JavaFXやJINPUTまで入れ込んでみました。
(JavaをExeにしているページはあるかもしれないけど、ここまではない?かしら?)

モジュールあります!

試してみてくださいね(^^)♪
SKK4_FX_EXE.zip

Youtube公開動画
https://youtu.be/pTQt_pPXgqc

Javaコンパイルしたモジュールをexe化してみる(1)Javaがexe化するに至った経緯を振り返る。
Javaコンパイルしたモジュールをexe化してみる(2)EXE化への「5段構え」の工程
Javaをexe化してみる(3)環境構築とJMODSを追加する
Javaをexe化してみる(4)バッチファイルで自動化しパッケージングする

シェアしていただけるとうれしいです。

共通編の見直しも実施しました(Java25&JavaFX25対応)Javaでゲームを作ろう

https://kinchannn.jp/javagame_common/

お正月休みの終わりが近くなってきた・・・汗。
もう休もう・・・(笑)

Java25&JavaFX25の対応が終わりました。
(他にはないことを祈る・・・汗)
各ゲームをJavaの最新LTSバージョンで動かしてみるのと、
共通編の修正と、大変でした。

今にして思えば、共通編は外出しにしておいて(本編からは切り離しておいて)
よかったと思っています。
全部の本を修正すると思ったら、発狂しそうです・・・汗汗汗。

とりあえずは、やった感があるので、よかったー。
もう少し早めにできるとよかったけど、なかなかねー。。。

Java25対応版ソースはこちら♪

Javaでゲームを作ろう

https://kinchannn.jp/javagame/

The Java 使いこなす

https://kinchannn.jp/thejava/

動作確認に、いろいろとゲームを少しだけやりました~。
本人が苦笑してしまう出来だなー。今思い出しても。

Javaでゲームを作ろう3- JavaFXシューティングゲーム編 -ダイジェスト版
https://youtu.be/pTQt_pPXgqc

Aki2氏とのすったもんだもいろいろと思い出せて面白いものです(笑)。

シェアしていただけるとうれしいです。

Java25&JavaFX25対応をおこないました。全てのモジュール、対応完了!

おはようございます。きんです。

Java25&JavaFX25対応をおこないました。

現在の最新バージョン、LTSである25.0.1にて動作確認を行いました。
Java、JavaFX、ともに同じバージョンになります。

一部、sta.batとj.batの入れ替えを行っています。
ソースもわずかですが、修正を行いました。
(一部、コンパイルエラーになった部分のみ対応)
HPに置いてあるzipファイルについては、更新を行っています。

ココナラでの活動もあり、最新化しておく必要性もあったので、対応した。
というのが、正直なところでありますが、
現状のままだと、動かないところもあったので、最新化できてよかったと思っています。

ちなみにまだココナラでの活動(サポート)はまだとなりますが、
よければご利用くださいね~♪

↓↓↓ココナラのわたしの出品ページ↓↓↓
https://coconala.com/services/3999646?ref=top_histories&ref_kind=home&ref_no=1

新しい年がはじまって二日目。
今年もがんばるよー。がんばりましょう♪

本業の方は、また来年度から忙しくなるかも?
さてー、どうなるかなー・・・(--。。。

わたしのサイトもよろしく!
https://kinchannn.jp

The Java 使いこなす についても、約半日遅れで修正が完了しています。
(2026/01/02 19:39)

シェアしていただけるとうれしいです。

ココナラためしてみます!もしよければ、ご利用お願いいたします(_ _* 待ってまーす!

おはようございます。きんです。

昨日、ココナラに登録してみました!

もし、『時間をとって教えてほしい!』とかありましたら、リクエストください。
料金は別途発生することになってしまいますが、その分、お時間を予約というかたちで確保することができ、
聞きたいこと、困っていること、他にもいろいろお話ができることと思います。

(補足)
書籍をご購入いただいた方は、本の後ろの方に、問い合わせ先を載せています。
もちろん、そちらでお問い合わせいただいてもOKです!
返信に時間がかかるかもしれませんが、無料ですよん♪(^^)

直近はまだ本業があったりで、スケジュールをあまり開けていませんが、
(予約受付枠という時間を設定して開けていきます。わたしの場合は。ですが)
ココナラができる時間は、適宜設定していきたいと思っています。

プロフィール
https://coconala.com/users/5800154

出品サービス
https://coconala.com/services/3999646

ビデオチャット形式にしています。
zoomでやるらしいのですが、まだ、著者、やったことがなくて、
(仕事(本業)はもっぱらTeamsですね~)
手間取るかもしれなくて、
ココナラもはじめてですし、ちょっとおためし価格にしているところもあるかも?

年末年始の予定が見えてきたら、予約時間枠を設定していくので、
よければつかって~みてください♪

#Java #初心者 #学ぶ

シェアしていただけるとうれしいです。

HelloJavaGameを修正しました。

おはようございます。きんです。
おひさしぶりです。

生きてはいますが、本業が忙しいですね。
Javaではなく、JavaScript、TypeScriptをやっています。
フロントエンド、クライアントサイド側ですね。

バックエンドはJavaですね。
なんとかがんばっていきますーーー。

夏本番になってきますね。
暑くなってきますが、お元気でお過ごしください(^^)

あっ!お題の話をホントに忘れていました(笑)
(ホントに忘れるところだった・・・汗)

HelloJavaGameを修正しました。

問い合わせを受けまして、見直したところ、
JavaファイルがShift_JISのままになってて、
コンパイルがかからない状態でした。

申し訳ありませんでした(_ _*

Java~がんばってください~(^O^)ノ

Javaでゲームを作ろう○- 共通編 -
https://kinchannn.jp/javagame_common/

シェアしていただけるとうれしいです。

※※※ 紙版-100円しました! ※※※ Javaでゲームを作ろう1 第3版を発売しました! 

Javaでゲームを作ろう1 第3版を発売しました!

そして・・・

紙版をすることができました!

紙版

https://amzn.to/3VvXBx6

Kindleはこちら♪

https://amzn.to/3EIFpK3

ワンコインの道は厳しいですが、できる範囲で努力してみました。
引き続き、よろしくお願いいたします(_ _*

Javaでゲームを作ろう1 - シューティングゲーム編 -

シェアしていただけるとうれしいです。

Javaでゲームを作ろう0 - ゲーム基本編 - 第3版を発売しました!(値下げ断行!)

こんにちは。きんです!

Javaでゲームを作ろう0 - ゲーム基本編 - 第3版を発売しました!

いろいろと新しくする理由があって、細かいところを修正しています。
大きな流れは、第1版から変わりはありません。

あと、もうひとつ・・・。

販売価格を下げることができました!

\(⌒▽⌒)/ワーイ!
今は世の中、値上げの嵐ですよね・・・。正直、つらい・・・。

工夫することによって、値段を下げることができました。
(ワンコインの夢はついえたかも・・・でも、努力しました!)
(Kindle版は300円と、ワンコインです!紙にすると、そうはいかないみたいですね・・・)
これ以上は無理っぽいですが、できる範囲でがんばってみました!

他の本も値段を下げれないか、検討をしていきます。(1とか3とか、TheJavaも)
本業の方が忙しいので、少し時間がかかりますが、進めていきたいと思います。

↓本(紙)

https://amzn.to/3fRyIgh

↓Kindle

https://amzn.to/3UJ5RJW

紹介サイト(わたしのHP)
https://kinchannn.jp/javagame_kihon/

それではーがんばっていくぞおーーー!!

シェアしていただけるとうれしいです。