次のようなクラスがある場合:
class MultiThreadEg {
private Member member;
public Integer aMethod() {
..............
..............
}
public String aThread() {
...............
member.memberMethod(.....);
Payment py = member.payment();
py.processPayment();
...........................
}
}
aThread()が新しいスレッドであると仮定すると、共有メンバー オブジェクトに同時に多数のスレッドがアクセスすると、 (次のアクセス ルールで) 問題が発生するでしょうか?
Rule 1 : ONLY reading, no writing to the object(member).
Rule 2 : For all the objects that need some manipulation(writing/modification), a copy of the original object will be created.
例: payment()メソッドでは、次のようにします。
public class Member {
private Payment memPay;
public payment() {
Payment py = new Payment(this.memPay);//Class's Object copy constructor will be called.
return py;
}
}
私の懸念は、「書き込み」用にオブジェクトのコピーを作成しても (メソッドpayment()のように)、同時にあまりにも多くのスレッドがメンバーオブジェクトにアクセスすると、いくつかの不一致が生じることです。
事実は何ですか?この実装はすべての場合 (0 以上の同時アクセス) で信頼できますか? お知らせ下さい。ありがとう。