我必须处理一组守护进程,每个守护进程都实现一个监视服务。我希望能够做的是,创建守护进程,激活它们,停用和删除。
在创建时,我这样做是为了激活:
private void activateDaemon(Daemon daemon){
Thread thread = new Thread(){
@Override
public void run(){
daemon.processEvents();
}
};
thread.start();
}
现在这有效,但如果我想停用并删除它们。停用将停止进程事件(与 http://docs.oracle.com/javase/tutorial/essential/io/notification.html 中的方法相同),并应解除分配线程。删除应该只是销毁守护程序。
我正在考虑使用线程池,但不确定实现和类型。我不想要一个固定的线程池,因为我不知道所需的守护进程的数量。 缓存线程池似乎足够了,但文档告诉我它仅适用于"启动许多短期任务的应用程序",而守护进程可能会运行很长时间。
如何最好地安全地管理、激活和停用一组守护程序(监视服务)?
器适合您的任务,那么执行器就可以了,"短暂"只是一个提示,但不是必需的。问题是,如果你有一个假设 10 个线程的池,并通过等待特定事件来保持所有 10 个线程的忙碌,则在此期间无法处理其他任务,因为所有 10 个线程都繁忙。
有两种方法可以解决此问题:首先,您可以通过创建固定大小的线程池来简单地确保池中有足够的线程来处理所有任务,或者其次通过使用调度程序模型,其中一个调度程序在每个事件上唤醒,但随后只是将该事件的处理调度到该池中的线程, 否则是空闲的。
另一方面,您可以使用ThreadGroup/ThreadFactory并自己创建线程,这基本上是固定的ThreadPoolExecutor,但有更多的控制和更多的工作。