管理守护程序线程池

时间:2013-11-15 12:45:03

标签: java multithreading daemon watchservice

我必须处理一组守护进程,每个守护进程实现一个watchservice。 我希望能够做的是,创建守护进程,激活守护进程,停用和删除。

在创作的那一刻,我这样做是为了激活:

        private void activateDaemon(Daemon daemon){
            Thread thread = new Thread(){
                    @Override
                    public void run(){
                            daemon.processEvents();
                    }
            };
            thread.start();
    }

现在这可行,但如果我想停用并删除它们。 Deactivate会停止Processevents(与http://docs.oracle.com/javase/tutorial/essential/io/notification.html中的方法相同)并且应该取消分配线程。删除应该只是销毁守护进程。

我正在考虑使用线程池但不确定实现和类型。我不想要一个固定的线程池,因为我不知道所需的守护进程数量。缓存的线程池似乎已经足够,但文档告诉我它只适用于"启动许多短期任务的应用程序",而守护程序可能运行很长时间。

我最好如何安全地管理,激活和取消一组守护进程(观察服务)?

1 个答案:

答案 0 :(得分:1)

如果适合你的任务,执行官就可以了,“短命”只是一个提示,但不是必需的。问题是如果你有一个让我们说10个线程的池并通过等待特定事件来保持所有10个忙,那么在此期间不能处理任何其他任务,因为所有10个线程都忙。

有两种解决方法:首先,您可以简单地确保池中有足够的线程来通过创建固定大小的线程池来处理所有任务,或者通过使用调度程序模型来处理所有任务,其中一个调度程序唤醒在每个事件上,但只是将该事件的处理调度到该池中的一个线程,否则该空闲。

另一方面,你可以使用ThreadGroup / ThreadFactory并自己创建线程,这基本上是固定的ThreadPoolExecutor,但是你可以有更多的控制权和更多的工作。

相关问题