我正在学习Java中的线程,以及所有概念和关键字。我刚刚学习了volatile
关键字,并且在我的脑海中为我正在研究的项目提出了一些有趣的问题。假设我有一个名为Connector
的类,其字段如下:
public static String DEFAULT_CONNECTION_TYPE = "UDP";
假设我将在多个线程上创建大量Connector
个对象,但每个线程将使用不同的连接方法(如“TCP”)。在将使用其他连接类型的线程上,如果我不想为每个对象显式声明它,是否有办法在每个线程上更改DEFAULT_CONNECTION_TYPE
?是否有一个关键字将使一个变量线程本地,但仍然是该线程的静态?这甚至有意义吗?
答案 0 :(得分: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);
}
}
答案 1 :(得分:1)
答案 2 :(得分:1)