多个线程之间的可变静态变量

Ind*_*ity 0 java multithreading static-members

我正在学习Java中的线程,以及所有概念和关键字.我刚刚学会了这个volatile关键字,它在我脑海中为我正在研究的项目提出了一些有趣的问题.假设我有一个Connector用这样的字段调用的类:

    public static String DEFAULT_CONNECTION_TYPE = "UDP";
Run Code Online (Sandbox Code Playgroud)

假设我将Connector在多个线程上创建大量对象,但每个线程将使用不同的连接方法(如"TCP").在将使用其他连接类型的线程上,如果我不想为每个对象显式声明它,是否有办法更改DEFAULT_CONNECTION_TYPE每个线程?是否有一个关键字将使一个变量线程本地,但仍然是该线程的静态?这甚至有意义吗?

Abh*_*kar 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);
    }
}
Run Code Online (Sandbox Code Playgroud)