■ synchronized文
* synchronized修飾子を付与したメソッドは、複数のスレッドから同時に呼び出されることがなくなる * クリティカル セクション (critical section)を実現できる (クリティカル セクションについては、以下の関連記事を参照のこと)https://blogs.yahoo.co.jp/dk521123/37076571.html
使用上の注意
* 使い過ぎるとアプリケーションの処理性能が低下する恐れあり
構文
synchronized メソッドsynchronized void method() { // Something }synchronized メソッド
private Object lockObject = new Object(); synchronized (lockObject) { // Something }
デザインパターン「Single Thread Executionパターン」
* 複数スレッドから同時に実行されたくない場合、 「synchronized」をつけて、「同時にひとつのスレッドしか実行できない」ように制御する * 詳細は、以下の関連記事を参照のことhttps://blogs.yahoo.co.jp/dk521123/34224730.html
参考文献
http://java-code.jp/122■ volatile修飾子
「ヴォラタイル」と読む* 日本語だと「揮発性修飾子」 * スレッドからアクセスされても、内容が同期される * volatile修飾子をつけて変数を宣言すれば、 その変数は複数のスレッドからアクセスされても内容が同期されることが保障される
構文
public volatile boolean isDone;
Findbugs「static フィールド {2} の間違った遅延初期化」
* 対策としては「volatile」を付加すると消える
参考文献
http://kannokanno.hatenablog.com/entry/20120528/1338229536http://www.wisdomsoft.jp/148.html
http://www.ibm.com/developerworks/jp/java/library/j-jtp06197.html
http://d.hatena.ne.jp/cero-t/20120830/1346267076
資格
http://sjc-p.obx21.com/word/ev/volatile.html
■ Atomicな変数
* Atomic = 分割不可能な操作 => javaの仕様上、long/double の代入/参照は、アトミックな操作ではない * Atomic に関す用語説明は、以下の関連記事を参照のことhttps://blogs.yahoo.co.jp/dk521123/37076571.html
Atomicクラス
* AtomicXxxx(AtomicBoolean / AtomicInteger / AtomicIntegerArray etc) も用意されている
参考文献
https://www.jpcert.or.jp/java-rules/vna02-j.htmlAPI仕様
http://e-class.center.yuge.ac.jp/jdk_docs/ja/api/java/util/concurrent/atomic/package-summary.html