K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]


新規投稿 | 開設者ホームページへ戻る | ヘルプ


[2050] synchronizedについて
返信


投稿者:くまきち
2017/12/14 23:47:43

Link:
『基礎からのWebアプリケーション開発入門』のP.168のリスト5-3の40行目に  

synchronized void access()

という行があります。  
これはラストアクセス時刻を設定するだけのメソッドだと思いますが、なぜsynchronizedにする必要があるのでしょうか?
正直、多少ズレても誰にも迷惑をかけないように思ったので質問してみました。
よろしかったら回答頂けると、ありがたいです。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2051] Re:synchronizedについて
返信


投稿者:(ぱ)こと管理人
2017/12/16 00:12:38

Link:
>これはラストアクセス時刻を設定するだけのメソッドだと思いますが、
>なぜsynchronizedにする必要があるのでしょうか?

ここで設定するthis.lastAccessedTimeはlong型ですが、
Javaではlong型については、代入自体、atomicであることが保証されていません。

https://www.jpcert.or.jp/java-rules/vna05-j.html

(intとかは良さそうなのですが、あまりそれに依存したコードは私は
書きたくないところです)


>正直、多少ズレても誰にも迷惑をかけないように思ったので質問してみました。

atomicでないということは、時刻が多少ずれるということだけでなく、
「結果がどうなるかわからない」ということだと思います。
(上記ページで引用されているJLSの記述を読むと、32ビット単位で
異なる値が混じる、ということしか起こらないようにも読めますが……)
[ この投稿を含むスレッドを表示] [ この投稿を削除]