Java,如何生成监视程序状态的线程?
我想创建一个线程,该线程将在后台持续运行,并在程序运行时检查其状态。我只想知道如何保持它运行以及如何创建线程。实现一个检查程序状态的工具(当然,检查程序状态的方式由您自己决定),然后将它交给一个并启动线程 我链接的javadocs中有几个示例为您的代码提供了基础。有关更多详细信息和更高级的并发功能,请查看检查程序状态的。实现a(当然,检查程序状态的方式取决于您自己),然后将其交给a并启动线程 我链接的javadocs中有几个示例为您的代码提供了基础。有关更多详细信息和更高级的并发功能,请查看。您知道有一个类,对吗Java,如何生成监视程序状态的线程?,java,multithreading,state,Java,Multithreading,State,我想创建一个线程,该线程将在后台持续运行,并在程序运行时检查其状态。我只想知道如何保持它运行以及如何创建线程。实现一个检查程序状态的工具(当然,检查程序状态的方式由您自己决定),然后将它交给一个并启动线程 我链接的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的答案)
- 使目标程序适合监控 实现第二项比你想象的要复杂得多。需要考虑的是:
- 使您正在观看的任何字段变为易变的
- 使用对共同构成一致状态的字段组的同步访问,以便更新是“原子的”
- 您需要做两件主要的事情:
中断()
,在特定情况下,可能需要传播该中断。如何保持线程运行,使其不会停止?只要不断检查我让它检查的东西?@Joe F,看我的编辑。除非发出中断()
,否则线程将继续执行,在特定情况下,可能需要传播该中断。我认为您的问题已经得到了充分的回答。要接受答案,请单击您认为最能回答您问题的答案旁边的“复选标记”。我认为您的问题已得到充分回答。要接受答案,请单击您认为最能回答问题的答案旁边的“复选标记”。