Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,如何生成监视程序状态的线程?_Java_Multithreading_State - Fatal编程技术网

Java,如何生成监视程序状态的线程?

Java,如何生成监视程序状态的线程?,java,multithreading,state,Java,Multithreading,State,我想创建一个线程,该线程将在后台持续运行,并在程序运行时检查其状态。我只想知道如何保持它运行以及如何创建线程。实现一个检查程序状态的工具(当然,检查程序状态的方式由您自己决定),然后将它交给一个并启动线程 我链接的javadocs中有几个示例为您的代码提供了基础。有关更多详细信息和更高级的并发功能,请查看检查程序状态的。实现a(当然,检查程序状态的方式取决于您自己),然后将其交给a并启动线程 我链接的javadocs中有几个示例为您的代码提供了基础。有关更多详细信息和更高级的并发功能,请查看。您

我想创建一个线程,该线程将在后台持续运行,并在程序运行时检查其状态。我只想知道如何保持它运行以及如何创建线程。

实现一个检查程序状态的工具(当然,检查程序状态的方式由您自己决定),然后将它交给一个并启动线程

我链接的javadocs中有几个示例为您的代码提供了基础。有关更多详细信息和更高级的并发功能,请查看检查程序状态的。

实现a(当然,检查程序状态的方式取决于您自己),然后将其交给a并启动线程

我链接的javadocs中有几个示例为您的代码提供了基础。有关更多详细信息和更高级的并发功能,请查看。

您知道有一个类,对吗

Thread t = new Thread(new Runnable(){
    @Override
    public void run(){
        while(!Thread.currentThread().isInterrupted()){
            // do stuff
        }
    }
});
t.start();
作为将来的参考,如果您打算继续开发多线程应用程序,我建议您阅读

编辑-此外,如果您需要更复杂的知识,我建议您阅读框架。

您知道有一个类,对吗

Thread t = new Thread(new Runnable(){
    @Override
    public void run(){
        while(!Thread.currentThread().isInterrupted()){
            // do stuff
        }
    }
});
t.start();
Executors.newSingleThreadExecutor().submit(new ApplicationMonitor());

class ApplicationMonitor implements Runnable {
    public void run() {
        // do your monitoring stuff
    }
}
作为将来的参考,如果您打算继续开发多线程应用程序,我建议您阅读

编辑-此外,如果您需要更复杂的知识,我建议您阅读该框架

Executors.newSingleThreadExecutor().submit(new ApplicationMonitor());

class ApplicationMonitor implements Runnable {
    public void run() {
        // do your monitoring stuff
    }
}
ApplicationMonitor不应返回,也不应允许抛出异常。或者,也许更安全一些,让ApplicationMonitor只做一次检查,并将submit()调用放入循环中。然后监控可能会失败,稍后将重新启动:

while (true) {
    try {
        Future<?> future = Executors.newSingleThreadExecutor().submit(
                    new ApplicationMonitor());
        future.get(); // can add a timeout here to limit the monitoring thread
    } catch (Exception e) {
        reportMonitoringException(e);
    }
    sleepUntilNextMonitoringCycle();
}
使用这种方法,您无法获得所有计划调用的未来,因此您的异常必须在ApplicationMonitor中处理

ApplicationMonitor不应返回,也不应允许抛出异常。或者,也许更安全一些,让ApplicationMonitor只做一次检查,并将submit()调用放入循环中。然后监控可能会失败,稍后将重新启动:

while (true) {
    try {
        Future<?> future = Executors.newSingleThreadExecutor().submit(
                    new ApplicationMonitor());
        future.get(); // can add a timeout here to limit the monitoring thread
    } catch (Exception e) {
        reportMonitoringException(e);
    }
    sleepUntilNextMonitoringCycle();
}

使用这种方法,您无法获得所有计划调用的未来,因此您的异常必须在ApplicationMonitor中处理。

您需要做两件主要的事情:

  • 启动你的监控线程(见@Moonbeam的答案)
  • 使目标程序适合监控
  • 实现第二项比你想象的要复杂得多。需要考虑的是:

    • 使您正在观看的任何字段变为易变的
    • 使用对共同构成一致状态的字段组的同步访问,以便更新是“原子的”

      • 您需要做两件主要的事情:

      • 启动你的监控线程(见@Moonbeam的答案)
      • 使目标程序适合监控
      • 实现第二项比你想象的要复杂得多。需要考虑的是:

        • 使您正在观看的任何字段变为易变的
        • 使用对共同构成一致状态的字段组的同步访问,以便更新是“原子的”

        它们在我的答案中—“Runnable”、“Thread”和“Java并发学习线索”它们在我的答案中—“Runnable”、“Thread”和“Java并发学习线索”我如何保持线程运行,使其不会停止?只要不断检查我让它检查的东西?@Joe F,看我的编辑。线程将继续执行,除非发出
        中断()
        ,在特定情况下,可能需要传播该中断。如何保持线程运行,使其不会停止?只要不断检查我让它检查的东西?@Joe F,看我的编辑。除非发出
        中断()
        ,否则线程将继续执行,在特定情况下,可能需要传播该中断。我认为您的问题已经得到了充分的回答。要接受答案,请单击您认为最能回答您问题的答案旁边的“复选标记”。我认为您的问题已得到充分回答。要接受答案,请单击您认为最能回答问题的答案旁边的“复选标记”。