如何检测线程正在等待原子引用

时间:2014-07-18 09:36:18

标签: java java.util.concurrent

我有一个包含外部服务连接的单例,这个连接被声明为原子引用

Connection connection = new AtomicReference<>(new Connection());

只要我的webservice使用了这个连接,许多线程可能想要访问这个引用,所以如果一个人正在使用它,那么所有其他人都会等待。

我想记录线程正在等待此引用的信息,是否有人知道如何检测该线程正在等待原子引用?

我应该扩展AtomicReference并包装方法吗?还有其他办法吗?

1 个答案:

答案 0 :(得分:2)

AtomicReference是一个非阻塞并发原语。所有读者都能够立即取消引用它,并且只有当有许多并发的编写者时,他们才会使用比较和交换操作来更新引用(不是普通的,无条件的{{1 ,)会有一些停滞,但不会以阻塞的形式;相反,他们将运行繁忙的写入重试循环。所有这些写作仍然让读者不受影响。

因此,任何阻止都可能只发生在set实例上,如果它已实现此类阻止。当然,这超出了与Connection相关的任何问题。