我正在开发一个使用并发线程的程序(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
有点像。
理想情况下,我希望看到更新到位(所以没有新行等,但我愿意接受任何让我快速查看此类信息的想法。
答案 0 :(得分:1)
控制台输出有多重要?我的意思是,其他机制(即图形)可以吗?
无论哪种方式,我都会将其作为两个步骤来处理。
如果JConole和默认线程信息不够(WAITING,堆栈跟踪等),您可以让线程在发生状态时发布更新。我喜欢使用MBeans来执行此操作,以便您可以将更新的发布与阅读分开。否则,您可以使用状态更新某个共享位置,并在同一VM中完成读取。甚至可能将进程信息转储到文件中?
一旦你有线程更新过程信息,显示它应该是直截了当的。如果确实希望控制台输出和让它不滚动,我认为像ncurses这样的东西是你唯一的选择。
否则,编写一个读取仪器数据并更新显示的小UI可能更简单。如果您使用MBean(以及将UI物理地与服务器分开)或者只是从文件中读取,您可以通过MBean服务器读取此数据。如果你想要一些漂亮的图表,JFreeChart很不错。
说了这么多,Haim写了一个'顶级'风格的东西来监控线程。见here。可能有用