★★Java質問・相談スレッド153★★
■ このスレッドは過去ログ倉庫に格納されています
0478デフォルトの名無しさん
2012/05/01(火) 09:23:16.89無駄じゃないよ。synchronized必要
setterにsynchronizedを付けるならgetterにも付けないと不釣合いだろ
カッコ悪いだろ
ここを嫁
http://gee.cs.oswego.edu/dl/cpj/jmm.html
final class VFloat {
private float value;
final synchronized void set(float f) { value = f; }
final synchronized float get() { return value; }
}
上記getメソッドにsynchronizedが無い場合、setメソッドでセットされたはずのvalueの値が
別コアで実行される別スレッドから読み出せないことが有りうるんだよ
なぜなら、高度に最適化された優秀で賢いコンパイラは変数をメモリーではなく
CPUのレジスターに割り当てたりすることもあるからだ
synchronizedの入口と出口でマルチコアCPUのコア間の不整合が解消されるしくみだ
■ このスレッドは過去ログ倉庫に格納されています