有没有办法计算对原始变量的访问线程



我的代码中有一个简单的原始布尔x。由于代码的复杂性,我不确定访问它的线程数。也许它从未被共享,或者只被一个线程使用,也许不是。如果它在线程之间共享,我需要改用AtomicBoolean

有没有办法计算访问布尔 x 的线程?

到目前为止,我对代码进行了审查,但它非常复杂,不是我写的。

如果这只是为了测试/调试目的,你可以这样做:

如果情况并非如此,则通过 getter 公开布尔值并计算 getter 中的线程数。这是一个简单的例子,我在其中列出了访问getter的所有线程:

class MyClass {
    private boolean myAttribute = false;
    private Set<String> threads = new HashSet<>();
    public Set<String> getThreadsSet() {
        return threads;
    }
    public boolean isMyAttribute() {
        synchronized (threads) {
            threads.add(Thread.currentThread().getName());
        }
        return myAttribute;
    }
}

然后你可以测试

MyClass c = new MyClass();
Runnable runnable = c::isMyAttribute;
Thread thread1 = new Thread(runnable, "t1");
Thread thread2 = new Thread(runnable, "t2");
Thread thread3 = new Thread(runnable, "t3");
thread1.start();
thread2.start();
thread3.start();
thread1.join();
thread2.join();
thread3.join();
System.out.println(c.getThreadsSet());

这输出:

[t1, t2, t3]

编辑:刚刚看到您添加了通过 setter 访问的属性,您可以调整解决方案并在 setter

相关内容

  • 没有找到相关文章