我正在创建一个监视应用程序,可以监视100-150个设备...现在为了设计监视应用程序,我有两种方法:-
- 为要监视的每个设备创建一个线程,每个线程会ping(使用ICMP)设备以知道设备是否在线。这些线程将无限运行以在特定时间间隔(比如60秒)后了解它们的状态。
- 创建一个线程池,并为每个设备提交一个任务到线程池中。任务很简单,就是ping设备。因此,在当前设计中,任务的数量将超过线程池中的线程数。例如,假设有100个要监视的设备,则将有100个任务需要监视,而线程池将拥有40个线程来完成这100个任务。当然,运行下一批任务的时间持续时间将为完成线程池中所有待处理任务而设计。
ScheduledExecutorService
的版本,它可以检测到任务被饥饿并相应地增加线程池大小,那将非常棒。 - Mark PetersScheduledThreadPoolExecutor
的文档中查看了一下:尽管此类继承自ThreadPoolExecutor,但它并不适用于继承的某些调整方法。特别是因为它作为一个使用corePoolSize线程和无界队列的固定大小池,所以对maximumPoolSize的调整没有有用的效果。虽然这会很好! - Mark Peters