【发布时间】:2019-08-05 02:14:59
【问题描述】:
我对多个线程使用同一个变量时的竞争条件有疑问。
例如:
private static final ContentHandler ORG_OMG_xmi = new RootXMLContentHandlerImpl(
"org.omg.xmi", new String[] { "xmi" }, "xmi",
"http://schema.omg.org/spec/XMI/2.1", null);
如何将 ContentHandler 更改为线程本地,以便同时将它用于多个线程?
【问题讨论】:
-
static final的重点是声明一个可在此类外部访问且不可变的变量。无法更新它的值。我不知道你想用这个变量做什么,但我认为你需要明确你想做什么。 -
是的,我在类外同时使用多个线程访问此变量,因此我必须将其更改为线程本地
-
如果它不是线程安全的,您只需将其设为本地即可。例如,在多个线程之间共享
public static final String没有任何问题。 -
我知道问题出在 private static final ThreadLocal
ORG_OMG_xmi = new ThreadLocal ( "org.omg.xmi", new String[] { "xmi" }, "xmi", "schema.omg.org/spec/XMI/2.1", null);不工作 -
只要使用
ThreadLocal
标签: java