同時に実行中の2つのスレッドの書き込みアクセスのグラフを描画する必要があります。スレッド自体に干渉することなく、これらのアクセスのタイムスタンプ値のペアを配列に書き込む最善の方法は何ですか?書き込まれるキューは、次のようになります。Javaでスレッドの振る舞いを分析する
import java.util.concurrent.atomic.AtomicInteger;
class IQueue<T> {
AtomicInteger head = new AtomicInteger(0);
AtomicInteger tail = new AtomicInteger(0);
T[] items = (T[]) new Object[100];
public void enq(T x) {
int slot;
do {
slot = tail.get();
} while (! tail.compareAndSet(slot, slot+1));
items[slot] = x;
}
public T deq() throws EmptyException {
T value;
int slot;
do {
slot = head.get();
value = items[slot];
if (value == null)
throw new EmptyException();
} while (! head.compareAndSet(slot, slot+1));
return value;
}
public String toString() {
String s = "";
for (int i = head.get(); i < tail.get(); i++) {
s += items[i].toString() + "; ";
}
return s;
}
}
スレッドが書き込みを開始/停止するたびに記録したいと思います。
'LinkedBlockingQueue' /' ArrayBlockingQueue'を使用すると何が問題になりますか? – pjp
btraceは、プログラムの開始時にエージェントとして事前にコンパイルして添付することができます。 – VonC
それは教育的な運動のためです。 – pypmannetjies