gpt4 book ai didi

java - 分析 Java 中的线程行为

转载 作者:太空宇宙 更新时间:2023-11-04 08:59:03 25 4
gpt4 key购买 nike

我需要绘制两个并发运行线程的写访问图。将这些访问的时间戳值对写入数组而不干扰线程本身的最佳方法是什么?正在写入的队列如下所示:

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;
}
}

我想在线程开始/停止写入时进行记录。

最佳答案

一种可能是使用 BTrace ,用于动态(字节码)检测正在运行的 Java 程序的类。
BTrace 将跟踪操作插入正在运行的 Java 程序的类中,并对跟踪的程序类进行热交换。

// import all BTrace annotations
import com.sun.btrace.annotations.*;
// import statics from BTraceUtils class
import static com.sun.btrace.BTraceUtils.*;

// @BTrace annotation tells that this is a BTrace program
@BTrace
public class HelloWorld {

// @OnMethod annotation tells where to probe.
// In this example, we are interested in entry
// into the Thread.start() method.
@OnMethod(
clazz="java.lang.Thread",
method="start"
)
public static void func() {
// println is defined in BTraceUtils
// you can only call the static methods of BTraceUtils
println("about to start a thread!");
}
}

关于java - 分析 Java 中的线程行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1372868/

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