关于100个任务的线程创建或线程池

ash*_*mca 15 java multithreading threadpool

我正在创建一个可以监控100-150个设备的监控应用程序......现在设计一个监控应用程序,我有两种方法: -

  1. 为要监视的每个设备创建一个线程,每个线程将ping(使用ICMP)到设备以了解设备是否在线.这些线程将在特定时间间隔(例如60秒)后无限运行以了解其状态.

  2. 创建线程池,并为每个设备将任务提交给线程池.任务是简单ping到设备.因此,在当前的设计中,任务将超过线程池中的线程.例如,假设有100个要监视的设备,将有100个要监视的任务,并且线程池将有40个线程来完成这100个任务.当然,运行下一组任务的持续时间将使得完成线程池中的所有挂起任务.

哪种方法会更好?

Jon*_*eet 12

我创建了一个ScheduledExecutorService(例如via Executors.newScheduledThreadPool),允许你安排重复的ping.你知道每次ping可能需要多长时间吗?如果你只需要每分钟ping一次100个设备,我希望你可以用很少的线程 - 远远少于40个.

您可以使用相当少的线程来启动它 - 但要注意Mark Peters在评论中提出的信息 - 所使用的实现不会扩展(正如我所期望的那样); 它实际上是一个固定的线程池.不过,你应该可以做到少于40 ...