Javaのスレッド同期:ReentrantLockとsynchronizedキーワードの実装
第14章 コンカレンシー
スレッド同期
マルチスレッド環境における実行の不確定性問題を解決するため、スレッド同期メカニズムが導入されます。これにより、あるスレッドが特定のメソッドを使用中は、他のスレッドは待機状態になります。
Javaでマルチスレッド同期問題を解決する方法は主に2つあります:
Java SE 5.0で導入されたReentrantLockクラス
共有メモリのクラ ...
6月27日 21:56 投稿
Java後端開発者向け面接対策:2025年春採用版
Java言語の基本概念
オブジェクト指向の三大原則(カプセル化、継承、多相性)について説明してください。
カプセル化は、データとその操作メソッドをクラス内にまとめて内部状態を隠蔽し、外部からは制御されたインターフェース経由でのみアクセス可能にする仕組みです。継承は、既存クラス(スーパークラス)のフィールドやメソッドを新たなクラス(サブクラス)が引き ...
6月17日 17:13 投稿
Javaにおけるリソース効率化スレッドプールの実装手法
標準ThreadPoolExecutorとの動作比較
本実装はjava.util.concurrent.ThreadPoolExecutorの動作を拡張。主な差異:
標準スレッドプール:初期化時コアスレッド生成。キュー満杯で追加スレッド作成
本実装:要求時動的スレッド生成。タスク完了後全スレッド終了
利点:常駐スレッド削減によるメモリ節約(1スレッド≈1MB)とCPUコンテキスト切り替えコスト低減
基本実装例
p ...
6月16日 21:39 投稿
Javaのスレッド制御におけるsleepとwaitの挙動の違い
Thread.sleepによる一時停止
Thread.sleep()は、現在実行中のスレッドを指定された時間だけ一時停止させる静的メソッドです。このメソッドの大きな特徴は、休眠中であってもオブジェクトのロック(モニター)を解放しない点にあります。そのため、同期的な処理の中で一時的に処理を遅延させたい場合や、単純なタイミング調整に利用されるのが一般的です。
以下の例では、別 ...
6月13日 21:23 投稿
Java面接準備ガイド
華為杭研所(面接内容)
マルチスレッド
スレッドを作成する複数の方法
Threadクラスを継承し、runメソッドをオーバーライドする
Runnableインターフェースを実装し、runメソッドをオーバーライドする。その後、Threadオブジェクトを作成し、Runnableタスクを渡す
Callableインターフェースを実装し、callメソッドをオーバーライドする。FutureTaskを作成して実行結 ...
6月12日 18:59 投稿
ソケットを使用した単一シリアルポートの共有読み書き実装
物理シリアルポートはPCに接続され、シリアルポート名によって一意に識別されます。
この場合、物理シリアルポートはそのポート名によって単一のスレッドまたはプロセスインスタンスのみが占有でき、他のスレッドやプロセスは同じポート名で物理シリアルポートと通信できません。これをシリアルポートの排他性と呼びます。
解決策:
核心思想:コンピュータソフトウェアに ...
6月11日 23:32 投稿
Pythonの高度なテクニック:マルチプロセス、マルチスレッド、デコレータ
Pythonの高度なテクニック:マルチプロセス、マルチスレッド、デコレータ
本記事では、Pythonにおけるマルチプロセス、マルチスレッド、デコレータの概念と実装方法について解説します。これらのテクニックは、プログラムのパフォーマンス向上やコードの再利用性を高める上で重要です。
1. 基本概念の理解
マルチプロセス
マルチプロセスとは、単一のプログラム内で複 ...
6月8日 20:59 投稿
マルチスレッド環境下でのユニットテスト出力キャプチャのカスタマイズ
課題の背景
テスト実行中に発生するprintなどの標準出力は、デバッグや結果分析において重要な情報源です。しかし、Pythonの標準ライブラリunittestでは、これらの出力はデフォルトでコンソールに直接表示されるため、個々のテストケースごとに分けて収集するには特別な対応が必要です。
一般的なアプローチとして、sys.stdoutを一時的なio.StringIOインスタンスにリダイレ ...
6月6日 17:08 投稿
ブロッキングキューの詳細と実装:生産者-消費者モデルを構築する
ブロッキングキューとは
ブロッキングキューは特殊な種類のキューで、「先入れ先出し」(FIFO)の原則に従います。これはスレッドセーフなデータ構造であり、以下の特性を持っています:
キューが満杯の場合、追加の要素を挿入しようとするとブロックされ、他のスレッドが要素を取り出すまで待機します。
キューが空の場合、要素を取り出そうとするとブロックされ、他の ...
5月27日 21:30 投稿
C/C++修飾子の理解と応用
一、volatile 修飾子
1. 修飾可能な対象
変数(通常の変数、ポインタ、構造体メンバなど)。
関数は修飾できない(ただし、関数のパラメータや戻り値は volatile 型にできる)。
2. 役割
コンパイラによる変数アクセスの最適化を禁止:変数の読み取りや書き込みのたびにメモリから直接操作され、レジスタ内のキャッシュ値が使用されない。
予期せず変更される可能性のあ ...
5月26日 18:07 投稿