1

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

4

3 回答 3

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

于 2015-08-06T10:08:47.027 回答
0

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

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

是守护进程

公共最终布尔值 isDaemon()

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

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

然后你可以通过调用来询问线程的当前状态:

Thread.State ts = thread.getState();

你应该得到以下之一:

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

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

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

  • BLOCKED 阻塞等待监视器锁的线程处于此状态。

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

  • TIMED_WAITING 等待另一个线程执行操作达指定等待时间的线程处于此状态。

  • TERMINATED 已退出的线程处于此状态。

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

于 2015-08-06T10:16:20.450 回答
0

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

thread.isAlive()
于 2015-08-06T09:42:01.720 回答