我有一个包含外部服务连接的单例,这个连接被声明为原子引用
Connection connection = new AtomicReference<>(new Connection());
只要我的webservice使用了这个连接,许多线程可能想要访问这个引用,所以如果一个人正在使用它,那么所有其他人都会等待。
我想记录线程正在等待此引用的信息,是否有人知道如何检测该线程正在等待原子引用?
我应该扩展AtomicReference并包装方法吗?还有其他办法吗?
答案 0 :(得分:2)
AtomicReference
是一个非阻塞并发原语。所有读者都能够立即取消引用它,并且只有当有许多并发的编写者时,他们才会使用比较和交换操作来更新引用(不是普通的,无条件的{{1 ,)会有一些停滞,但不会以阻塞的形式;相反,他们将运行繁忙的写入重试循环。所有这些写作仍然让读者不受影响。
因此,任何阻止都可能只发生在set
实例上,如果它已实现此类阻止。当然,这超出了与Connection
相关的任何问题。