gpt4 book ai didi

java - 有没有办法计算访问原始变量的线程数?

转载 作者:行者123 更新时间:2023-11-30 07:41:05 25 4
gpt4 key购买 nike

我的代码中有一个变量,一个简单的原始 boolean 值 x。由于代码复杂,我不确定访问它的线程数。也许它永远不会被共享,或者只被一个线程使用,也许不会。如果它在线程之间共享,我需要改用 AtomicBoolean

有没有办法统计访问 boolean 值 x 的线程数?

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

最佳答案

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

如果还不是这种情况,请通过 getter 公开 boolean 值并计算 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 中记录线程

关于java - 有没有办法计算访问原始变量的线程数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56539028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com