2012-01-12 90 views
0

我现在正在学习Java中的线程以及所有概念和关键字。我刚刚了解到volatile这个关键字,并且在我的工作中提出了一些有趣的问题。说我有一个域名为Connector这样的类:跨多个线程的可变静态变量

public static String DEFAULT_CONNECTION_TYPE = "UDP"; 

说我会打很多的多线程Connector对象,但是每个线程将使用不同的连接方法(如“TCP”)。在将使用其他连接类型的线程上,如果我不想为每个对象显式声明它,是否有办法在每个线程上更改DEFAULT_CONNECTION_TYPE?有没有一个关键字可以创建一个可变的线程本地的,但在该线程中仍然是静态的?这甚至有意义吗?

+2

请不要使用可变静,甚至线程全局! – 2012-01-12 23:10:27

回答

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 2012-01-13 00:58:28