图形/文本显示线程进度和状态

时间:2012-01-25 00:49:14

标签: java multithreading user-interface concurrency console

我正在开发一个使用并发线程的程序(Java)。我经常遇到这些线程正在执行的工作的问题。这不是实际线程处理的问题,而是它正在做的实际内容(数据库访问,数学计算,文件IO等)。

我想提供一些从控制台实时查看线程状态的方法。也许是这样的:

THREAD ID   THREAD STATUS         TABLE NAME          ELAPSED TIME         
Thread 1:   Dumping               MSF011              22s
Thread 2:   Conversion            MSF002              2h 8m
Thread 3:   Conversion            MSF020              10s
Thread 4:   Loading               MSF001              14m

ITEMS LEFT IN QUEUE: MSF033, MSF123, MSFXYZ
有点像。

理想情况下,我希望看到更新到位(所以没有新行等,但我愿意接受任何让我快速查看此类信息的想法。

1 个答案:

答案 0 :(得分:1)

控制台输出有多重要?我的意思是,其他机制(即图形)可以吗?

无论哪种方式,我都会将其作为两个步骤来处理。

  1. Instrument你的主题
  2. 显示仪器数据
  3. 检测线程

    如果JConole和默认线程信息不够(WAITING,堆栈跟踪等),您可以让线程在发生状态时发布更新。我喜欢使用MBeans来执行此操作,以便您可以将更新的发布与阅读分开。否则,您可以使用状态更新某个共享位置,并在同一VM中完成读取。甚至可能将进程信息转储到文件中?

    显示仪器数据

    一旦你有线程更新过程信息,显示它应该是直截了当的。如果确实希望控制台输出让它不滚动,我认为像ncurses这样的东西是你唯一的选择。

    否则,编写一个读取仪器数据并更新显示的小UI可能更简单。如果您使用MBean(以及将UI物理地与服务器分开)或者只是从文件中读取,您可以通过MBean服务器读取此数据。如果你想要一些漂亮的图表,JFreeChart很不错。

    说了这么多,Haim写了一个'顶级'风格的东西来监控线程。见here。可能有用