我正在从我的主程序运行一个生成数据的方法,并且还派生了一个线程,该线程监视该方法正在写入的队列,如果有数据,它将保存到磁盘。

我的问题是过去我会对其进行多线程处理并能够监视其他线程的寿命,但是我不确定如果只是主要方法,该怎么做?该方法正在缓慢生成数据,并且一旦它清空派生的文件编写器进程停止的队列后,就无法使用sleep或!queue.empty()起作用的问题。

我知道最坏的情况是我可以在生成数据的方法中写入文件,但是除此之外,我还能做些什么来监视是否仍在执行另一种方法?

最佳答案

对于ExecutorService来说听起来不错。在您的主要方法中创建它:

ExecutorService pool = Executors.newFixedThreadPool(10);


ExecutorService基本上是队列的包装器和在该队列上等待的一组线程(在上面的示例中为10)。当队列中出现某些东西(提交)时,恰好有一个线程将其拾取:

pool.submit(someWork);


其中someWork是可运行的,例如包装要写入磁盘和写入过程的数据。在主线程中完成操作后,您只需简单地要求pool终止即可:

pool.shutdown();
pool.awaitTermination(60, TimeUnit.SECONDS);


此代码将等待60秒,以便其他线程完成并处理队列中的所有项目。

向我们显示更多代码,我可以帮助您进行重构。如果不想走那么远,某些Java集合中的方法会在队列为空时阻塞并在出现某些情况时唤醒线程。

关于java - 有没有办法判断程序是否仍在运行方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10807117/

10-12 00:13
查看更多