オブジェクト指向は戦場では必要無し その2
■ このスレッドは過去ログ倉庫に格納されています
0350293
NGNG>正直、Javaのマルチスレッドはよく知らないんだけど、
勉強しなよ。
>synchronized ってクリティカルセクションみたいな物じゃないの?
その通り。
>だとしたら何故意味がないの?
>>300 にあるように、
「getX(), setX()を作ってそれぞれsynchronized指定しても、」
意味がない、と言っている。
「Javaの格言」には、
p.x++;
p.y++;
みたいなのをマルチスレッドで実行するとおかしくなるからフィー
ルドをpublicにしちゃいかんのだ、と書いてある。
じゃあ、privateにして、synchronizedなアクセサgetX(), setX()
を付けたとして、
x = p.getX();
p.setX(x+1);
というコードを、スレッドAとスレッドBが以下のように実行したと
すると、
x = p.getX(); // スレッドA
x = p.getX(); // スレッドB
p.setX(x+1); // スレッドA
p.setX(x+1); // スレッドB
ふたつのスレッドがxをインクリメントしようとしたにも関わらず、
xは1しか増えないことになる。
getとsetが分かれてたり、xとyで独立してたりするアクセサは、
少なくともクリティカルセクションを守るためには役に立たんと
いうことだ。
■ このスレッドは過去ログ倉庫に格納されています