2012-01-12 8 views
0

私は今Javaのスレッドについて、すべての概念とキーワードとともに学んでいます。私はちょうどvolatileキーワードを学び、私が取り組んでいるプロジェクトについて私の心の中で興味深い質問をいくつか提起しました。私はこのようなフィールドを持つConnectorというクラスを持っていると言う:複数のスレッド間で変更可能な静的変数

public static String DEFAULT_CONNECTION_TYPE = "UDP"; 

は、私は複数のスレッドにConnectorオブジェクトをたくさん作ることになりますと言うが、各スレッドは、(「TCP」のような)別の接続方法を使用することになります。他の接続タイプを使用するスレッドで、すべてのオブジェクトに対して明示的に宣言したくない場合は、各スレッドのDEFAULT_CONNECTION_TYPEを変更する方法はありますか?変数をスレッドローカルにするキーワードはありますか?それでもそのスレッドには静的なものはありますか?それは理にかなっていますか?

+2

可変静、でもスレッドグローバルを使用しないでください! –

答えて

6

をチェックアウト、私はクラスのインスタンスでそれを運ぶ避けるために、複数のスレッドから静的変数を変更することはお勧めしませんが、それはあなたが何をしたいかどうThreadLocalを参照してください。

これを行うための正しい方法は、接続がインスタンスフィールドを入力することです:

enum ConnectionType { UDP, TCP; } 

class Connector { 

    private static final ConnectionType DEFAULT_CONNECTION_TYPE = 
     ConnectionType.UDP; 

    private final ConnectionType connectionType; 

    public Connector(ConnectionType connectionType) { 
     this.connectionType = connectionType; 
    } 

    public Connector() { 
     this(DEFAULT_CONNECTION_TYPE); 
    } 
} 
+0

この例は良いです。ここにThreadLocalを使用する理由はありません。 – jbindel

関連する問題