- PR -

サーブレットにおけるprivateなインスタンス変数について

投稿者投稿内容
前川
常連さん
会議室デビュー日: 2004/04/27
投稿数: 38
お住まい・勤務地: 1DK
投稿日時: 2005-02-10 09:30
引用:
インギさんの書き込み (2005-02-10 02:18) より:
スレッドセーフかどうかは ValueObject1 がスレッド間で共有されるかどうかによります

それでは本末転倒です。スレッド間で共有されても安全だからスレッドセーフなのであって。
「共有されるかどうかによ」ってしまう物を「スレッドセーフでない」と言います。

引用:
パテ太さんの書き込み (2005-02-09 22:11) より:
単一の処理を行っている。

Javaのソースコード上で単一の処理であるからと言って、実際にマシン上で単一の処理であるとは限りません。
似た話で、「i++; はアトミックでない」という物があります。
パテ太
ベテラン
会議室デビュー日: 2004/08/16
投稿数: 64
お住まい・勤務地: 千葉・東京
投稿日時: 2005-02-10 09:51
引用:

前川さんの書き込み (2005-02-10 09:30) より:

引用:
パテ太さんの書き込み (2005-02-09 22:11) より:
単一の処理を行っている。

Javaのソースコード上で単一の処理であるからと言って、実際にマシン上で単一の処理であるとは限りません。
似た話で、「i++; はアトミックでない」という物があります。



パテ太です。
後、long 値と double 値への参照、代入もアトミックではない。
というのがありますね。

ただ、
String型への参照値を代入する。
とString型への参照値を取得する。
はアトミックな処理だと思っていたのですが
違うのでしょうか?


[ メッセージ編集済み 編集者: パテ太 編集日時 2005-02-10 09:54 ]
前川
常連さん
会議室デビュー日: 2004/04/27
投稿数: 38
お住まい・勤務地: 1DK
投稿日時: 2005-02-10 10:14
引用:
パテ太さんの書き込み (2005-02-10 09:51) より:
String型への参照値を代入する。
とString型への参照値を取得する。
はアトミックな処理だと思っていたのですが
違うのでしょうか?

失礼しました。実際にマシン上でアトミックなのでは、というご意見だったのですね。私はそこまでは分かりません…。
Java VMの仕様に「オブジェクトの参照の代入はアトミックな処理でなければならない」という決まりがあるかどうかによりますね。

# VMがその仕様を守ってくれているかどうかにもよりますし、個人的には synchronized を明示しないと不安です。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-10 10:25
>それでは本末転倒です。スレッド間で共有されても安全だからスレッドセーフなのであって。
>「共有されるかどうかによ」ってしまう物を「スレッドセーフでない」と言います。
申し訳ないです。スレッドの筋を取り違えてしまっているかもしれません。
メソッドの処理がスレッドセーフであるかどうかではなく、サーブレット全体の処理がスレッドセーフであるかどうか、という意味で申し上げました。
言い換えれば setName() の処理スレッドセーフであっても、オブジェクト自体共有していては予期しない値が getName() で取得できるのではないかと。

スキルアップ/キャリアアップ(JOB@IT)