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

标签 java

我正在编写 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/

相关文章:

java - 如果调用 return ,线程会释放锁吗?

java - 如何使用多个同步线程对数组进行排序?

java - Picasso - 自定义 RequestHandler 不会在磁盘上缓存图像

java - 为什么这可以在 Java 7 下编译,但在 Java 8 下不行?

java - Couchbase RX 客户端 - 合并多个可观察量与平面图

java - Android API 和 Http 连接函数

java - Spark 1.6 java.io.IOException : Filesystem closed

java - Mockito.any 返回 null

java - 根据 JComboBox 值从 xml 文件获取下一个兄弟值到 java 并在控制台打印

java - 打印 Java 数组的最简单方法是什么?