我怎么知道守护进程是否从另一个线程停止

时间:2015-08-06 09:35:47

标签: java multithreading daemon apache-commons-daemon

我的守护进程在另一个线程上创建并运行一个函数,该函数运行许多其他函数。如果守护进程被关闭,我想在每个函数之前检查,如果没有,那么我将执行该函数。 我怎么知道守护进程是否被阻止了?

3 个答案:

答案 0 :(得分:0)

就像任何其他线程一样,您必须获取线程实例然后调用:

element.parents("body").bind('keydown', function (e) {
     //Condition to check if modal is opened
     var code = e.keyCode || e.which;
     if (code === 13) {
         var current = focusables.index(this);
         var next = focusables.eq(current + 1).length ? focusables.eq(current + 1) : focusables.eq(0);
         next.focus();
         e.preventDefault();
     }
 });

答案 1 :(得分:0)

class Daemon extends Thread()
{
  private boolean started;
  public void Daemon() {
    started = false;
  }
  public void run() {
    started = true;
    // rest of your code.
  }

  public boolean isStoped() {
    return started && !isAlive();
  }
}

使用isStoped()知道线程何时被停止。仅isAlive()是不够的,因为尚未启动的线程将返回false

答案 2 :(得分:0)

当在某个线程中运行的代码创建一个新的Thread对象时,新线程的优先级最初设置为等于创建线程的优先级,并且当且仅当创建线程是守护程序时才是守护程序线程

如果您不知道该线程是否是守护进程,请使用isDaemon

  

<强> isDaemon

     

public final boolean isDaemon()

     

测试此线程是否为守护程序线程。

     

返回:   如果此线程是守护程序线程,则为true;否则为false。否则就是假的。

然后你可以通过调用:

来询问线程的当前状态
Thread.State ts = thread.getState();

你应该得到以下其中一个:

线程状态。线程可以处于以下状态之一:

  • 尚未启动的线程处于此状态。

  • <强> RUNNABLE 在Java虚拟机中执行的线程处于此状态。

  • <强> BLOCKED 被阻塞等待监视器锁定的线程处于此状态。

  • <强>等待 无限期等待另一个线程执行特定操作的线程处于此状态。

  • <强> TIMED_WAITING 正在等待另一个线程执行最多指定等待时间的操作的线程处于此状态。

  • <强>封端的 已退出的线程处于此状态。

参考:http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#isDaemon()