JJUG CCC 2024 Springでの登壇資料です。 https://ccc2024spring.java-users.jp/
12月27日のJJUGナイトセミナーLT大会に参加しました(LT資料)。 会場片付けの際、マルチスレッド処理に関して発表された @hiroga_cc さんと、ForkJoinPoolとThreadPoolExecutorの使い分けについて、少しだけおしゃべりしました。その場では頭がこんがらがってしまったので、改めて整理します。 要旨 ForkJoinPoolは、次のようなジョブが効率的に実行できるように設計されたExecutorです。 各タスクがIOをともなわない、CPUヘビーな処理であること。 各タスクの処理が、新しいタスクを産み出すような、再帰的タスク構成であること。 上記の条件を満たさないジョブに対して、ForkJoinPoolが使えないというわけではありません。ただし、タスク発生状況に応じてに応じてスレッドの生成・破棄を制御したい場合などは、ThreadPoolExecutorの方
プロセスIDの取得 スレッドダンプの取得 Windowsでプロセスをサービス起動している場合 スレッドダンプを読む プロセスIDの取得 まずは Java のプロセスIDを取得するところから始める。jps で取得できる。 $ <JAVA_HOME>/bin/jps -l 主要なオプションは以下の通り(SunVM)。 オプション 説明 -m main メソッドに渡される引数を出力 -l アプリケーションの主要なクラスのフルパッケージ名、またはアプリケーションの JAR ファイルへのフルパス名を出力 -v JVM に渡される引数を出力 JDK7 からは JRockit と統合されたため jcmd が使えるので以下でもプロセスIDを取得できる。 $ <JAVA_HOME>/bin/jcmd または、単に ps コマンドで取得するでもよい。 $ ps -ef | grep -v 'grep' | g
コマンドプロンプトから、Javaプログラムを起動した場合、[Ctrl]キーを押しながら [Break] キーを押し採取。 また、“スレッドダンプツール”でも採取できます。 kill -Quit [プロセスID]でJavaVMに対してQUITシグナルを送ったとき採取。 (プロセスIDは管理コンソールで参照できます。) スレッドダンプはJavaプロセスの各スレッドの情報を参照することができるため、ハング時、特にデッドロックが発生している場合に、原因調査に有効な情報を与えます。 ■出力例 以下にデッドロックのサンプルプログラムと、スレッドダンプの出力例を示します。 -------------------------------------------------------------------------------- public class Deadlock implements Run
Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode
前回 blog1.mammb.com について書いたのでついでにスレッドセーフについても書いとこ。 レースコンディションとは スレッドセーフ化 複合アクション 複合アクションをスレッドセーフにする レースコンディションとは Javaではスレッドを比較的簡単に扱うことができますが、その利用にはいろいろと注意しなければならないことがあります。スレッドは簡単に扱えますが、スレッドの安全性を確保しつつ実行性能を得るのは難しいトピックの一つです。 以下のクラスはスレッドセーフではありません。 public class NotThreadSafe { private long nextLong; public long getNextLong() { return ++nextLong; } } getNextLong()の呼び出しは、複数スレッドからの呼び出しタイミングにより、正しい結果が得られなく
はじめに 順番が前後しますが、都合上「並行性」の章を先に書きたいと思います。 読んだところ 251 ページ 〜 268 ページ 前回はこちら Effective Java 読書会 10 日目 「Java の基本テクニック集」 - IT戦記 同期とは何か 同期 = 原子性 + 可視性 原子性(アトミック性) データの状態遷移の過渡的な不整合な状態が(どのスレッドからも)見えないという性質。 適切に相互排他することでデータの原子性を保証できる。(保護されたコードを実行できるスレッドは一つだけ。) 可視性(ビジビリティ) (どのスレッドからも)同じ値が見えるという性質。 普通、変数やフィールドの値はスレッドごとにキャッシュ(レジスタなど)されるなどしていて、スレッド間での同値性は保証されない。 同期するというのは、原子性を保証することだけではなく、可視性も保証することだということを忘れてはいけな
注意:.NET Framework 4、Visual Studio 2010に対応してアップデートした記事はこちら→「C#での、正しいマルチスレッドプログラムの書き方を求めて(2011年11月版)」 C#におけるマルチスレッドプログラムの作成方法は、たくさんのホームページで紹介されています。しかし、それらは正しく動いたとしても、それがC#や.NET Frameworkを作成した人々の期待したコードであるかどうかは残念ながら、コードを見るだけでは分かりません。生意気なこと言ってすいません また、BackgroundWorkerという、簡単に別スレッドを作成してメソッドを実行する方法も用意されてはいますが、それで満足していいのかという欲求もあります。より高度なスレッドの扱い方を会得したい。 そんなとき、やはり頼るべきはMicrosoft謹製 msdnライブラリでしょう。 しかし、実際にmsdn
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く