gpt4 book ai didi

java - 监控(记录)不同线程的执行

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:01 24 4
gpt4 key购买 nike

我正在编写 Java 程序来创建某人提供的 Runnable 对象的不同实例,然后运行它们。例如,用户给我一个带有可运行类的 .class 文件,我创建该对象的实例并运行它。一切正常,直到我决定监视每个不同线程的进度。假设当前 Runnable 对象在控制台中打印从 1 到 9 的所有数字。我想捕获该输出并将其作为字符串返回。使用 System.setOut(..) 会阻止我使用控制台,因此这不是一个选项。

最佳答案

使用 setOut 不会阻止您使用控制台,如果您先保存它并且它是您唯一的选择,除非您使用字节码检测。

static final PrintStream OUT = System.out;
static {
// capture all System.out
System.setOut(new MyPrintStream());

OUT.println("Print as normal");
}

class MyPrintStream extends PrintStream {
final ThreadLocal<StringBuilder> text = ThreadLocal.withInitial(() _> new StringBuilder());

public void print(String s) {
StringBuilder sb = text.get();
sb.append(s);
}

public void println(String s) {
StringBuilder sb = text.get();
sb.append(s).append('\n');
// do something with sb.
}

关于java - 监控(记录)不同线程的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32332170/

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