2012-02-04 9 views
4

私は2つのスレッドを持っています.1つはメッセージをディスパッチし、もう1つはメッセージをパーズします。シンプルで一般的。私はArrayBlockingQueueを同期に使用しますが、ディスパッチャがワーカーのメッセージキューに直接アクセスしないようにしたい - 私はラッパーを使用します。問題は、設定者が​​と宣言されるべきかどうかです。ArrayBlockingQueueラッパーメソッドを同期させる必要がありますか?

public class Worker implements Runnable{ 
    protected final ArrayBlockingQueue<ByteBuffer> messages = new ArrayBlockingQueue<ByteBuffer>(16); 

    public synchronized void putMessage(ByteBuffer msg) throws InterruptedException{ 
     messages.put(ByteBuffer); 
    } 
} 
+0

セッターはどこですか?それはputMessage()ですか?それはセッターではありません。 –

+0

ああ。質問を編集します。 – Greg

+0

@MozenRathキューオブジェクトが最終ですが、変更されません。その内容ではありません。 – Greg

答えて

6

putMessage方法は1つしかない場合、このメソッド内で非スレッドセーフ共有状態にアクセスするのに必要な時間でスレッド(またはアトミック共有状態にいくつかの変更を行う必要があります)を同期させる必要があります。

すべてのメソッドは、ArrayBlockingQueueのメソッドを呼び出すことです。このメソッドは、複数のスレッドによって同時にアクセスされるように正確に設計されています。

このメソッドを同期させる必要はありません。

+0

ありがとうございます。これを受け入れる。 – Greg

関連する問題