プリミティブ変数にスレッドをaccesingカウントする方法はありますか?

トライステート:

私は私のコードでは、変数、簡単な原始的なブールのxを持っています。そのため、コードの複雑さのため、私はそれにアクセスするスレッドの数がわからないと思います。多分それは、そうでないかもしれない共有されることはありません、または1つのスレッドによってのみ使用されます。それは、スレッド間で共有されている場合は、私が使用する必要がありますAtomicBoolean代わりに。

ブール値のxにアクセスするスレッドをカウントする方法はありますか?

今まで私は、コードの見直しをしましたが、それは非常に複雑で、私が書いていません。

歩数計:

これはただのテスト/デバッグするためのものであるならば、あなたは多分、このようにそれを行うことができます:

まだの場合場合は、ゲッターを経由してブール値を露出させ、ゲッターのスレッドを数えます。ここで私はゲッターにアクセスするすべてのスレッドのリストを作成する簡単な例を示します。

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]

EDIT:あなたは属性がセッターを介してアクセスされていることを追加したことだけでソー、あなたは解決策を適応し、セッターにスレッドのログを記録することができます

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=235444&siteId=1