java - 跨多个线程的可变静态变量

标签 java multithreading static-members

我现在正在学习 Java 中的线程以及所有概念和关键字。我刚刚学习了 volatile 关键字,它在我的脑海中为我正在从事的项目提出了一些有趣的问题。假设我有一个名为 Connector 的类,其字段如下:

    public static String DEFAULT_CONNECTION_TYPE = "UDP";

假设我将在多个线程上创建大量 Connector 对象,但每个线程将使用不同的连接方法(例如“TCP”)。在将使用其他连接类型的线程上,如果我不想为每个对象显式声明它,是否有办法更改每个线程上的 DEFAULT_CONNECTION_TYPE ?是否有一个关键字可以使变量成为线程本地变量,但在该线程中仍然是静态的?这还有道理吗?

最佳答案

我不建议仅仅为了避免在类实例中携带静态变量而从多个线程更改静态变量,但如果这就是您想要做的,请参阅 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);
    }
}

关于java - 跨多个线程的可变静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8842488/

相关文章:

java - 如何在单击 JCheckBox 时显示 JPopupMenu?

java - 迭代器和枚举的区别

c# - 确定性处理 ThreadStatic 对象

c++ - C++继承中的静态指针

java - Kotlin:将日期字符串转换为 ISO 字符串

java - 多个 Catch block 与在 Base Exception 类中捕获

java - 可重入锁实现细节

java - 等待和通知的正确用法

c++ - 我可以在抽象类中有静态数据成员吗?

c# - 通用问题...从通用类调用静态方法