2017-08-17 10 views
0

中のiは、オブジェクトがあるとしましょう:防ぐ他のスレッドアクセスオブジェクト書き込み

class Obj o{ 
    public int x; 
    public int y; 
} 

とスレッドがメソッドを呼び出します。

update(Obj o, int x, int y){ 
    o.x = x; 
    o.y = y; 
} 

どのように私は他のスレッドがフィールドへのアクセスを持っていることを防ぐことができますこのオブジェクトの 'update'の実行中に、メソッドがデータの読み込みを完了するまで待機しますか?

+2

シンプルなソリューションは、同期メソッドを使用することです。 https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html – urielSilva

答えて

1

アクセスを制御できるように、Objクラスのメンバーを非公開にする必要があります。次に、クラスの内部でupdate()メソッドを移動し、同期を宣言します。最後に、クラス内でgetX()メソッドとgetY()メソッドを作成して値を取得し、それらも同期させることを宣言します。

これらのメソッドをすべてクラスのメンバーにして同期させると、「同時に」異なるスレッドで実行できなくなります。

関連する問題