2015-06-06 36 views
0

我想使用一个CyclicBarrier对象作为静态成员,我有多线程正在修改CyclicBarrier对象状态,这样做是否安全?CyclicBarrier线程安全吗?

+0

为什么你有怀疑? –

+0

我无法在网上找到确保线程安全的东西,如果两个线程同时尝试更改状态,它会永久等待吗? –

+0

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html –

回答

1

的Javadoc说:

内存一致性效果:调用的await()在成功是屏障操作的一部分发生之前,行动,进而发生,之前的行动在一个线程操作之前,从其他线程中的相应await()返回。

和其他一些事情。

所以是...它是线程安全的。


1 - Javadoc中不使用的话 “线程安全的”。但是,我认为这是因为线程安全是一个棘手的概念。我所看到的定义有效地说,如果有多个线程,如果它是正确的(根据规范工作),则某些内容是“线程安全的”。如果你简单地说X是“线程安全的”,它会引发一个问题:指定的行为是什么? “正确”是什么意思? javadoc通过简单地声明关键同步属性...来避开这个问题......这是由JLS定义的一个非常精确的术语。

为什么我要提出这个问题?要指出的是,仅仅要求“是X线程安全的?”是肤浅的,容易引导你陷入问题......如果这是你分析的全部范围。

6

CyclicBarrier整点是为了同步多个线程。改变状态的唯一方法是await(有和没有超时)和reset,这些方法的文档清楚地描述了它们如何与其他线程交互。

是的,它是线程安全的。