java - 有没有办法判断程序是否仍在运行某个方法?

标签 java

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

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

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

最佳答案

听起来对于 ExecutorService 来说是一份不错的工作。在您的主方法中创建它:

ExecutorService pool = Executors.newFixedThreadPool(10);

ExecutorService 基本上是一个队列和一组等待该队列的线程的包装器(在上面的示例中为 10 个)。当某些内容出现在队列中(已提交)时,只有一个线程会拾取它:

pool.submit(someWork);

其中 someWork 是一个 Runnable,例如包装要写入磁盘的数据和写入过程。当您在主线程中完成后,您只需要求正常终止:

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

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

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

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

相关文章:

c# - 如何在不在代码中自己指定数组长度的情况下用用户输入填充数组

java - Java Gxt 中 ListStore 的迭代

java - 如何找到文本文件中最小的数字? ( java )

java - USB 设备在打开应用程序后重新连接之前无法使用

java - 如何使用 Java servlet 获取用户的动态输入而无需表单?

java - 将输入流写入文件 - 未找到文件

java - 如何在 Spring Hibernate 运行时设置数据库名称

java - 如何检查输入值是整数还是 float ?

Java Trident 库和 Thread.sleep()

java - 为什么在 Java 的二维数组中第二维不是强制性的?