监控节点网络连接状况----ping的使用以及使用Java线程池并发

来源:互联网 发布:选股好帮手 mac 破解 编辑:程序博客网 时间:2024/05/20 17:59

项目中有监控各个节点的状态。其中监控网络连接情况的时候,需要每个节点都ping一次。如果用单线程每个挨着ping,那么耗费的时间量是巨大的。

此时就要想到并发的思想。用多个线程并发的去ping。

而且,ping命令是有很到参数可以使用的。本人在win下使用,截图如下:

其中,-w命令是指定等待回复的超时时间。这里参数是毫秒。默认等待回复超时时间是1秒钟。可以设置指定的超时时间。

--------------------------上面是ping的准备知识。下面是线程池----------------------------

可以使用java开源的线程池来做这个任务。

Java里面线程池的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是ExecutorService。

class CheckerTask_concurrent extends TimerTask {public void run() {// 参数地址try {ExecuteCommand executeCommand = new ExecuteCommand();TerminalService ts = new TerminalService();Terminal terminal = new Terminal();// 读取所有的终端信息List<Terminal> list = ts.getAllTerminal();// 检查终端状态System.out.println(new Date());ExecutorService pool = Executors.newFixedThreadPool(20);System.out.println("开始检测各个终端状态");for (int i = 0; i < list.size(); i++) {String ip = list.get(i).getIp().trim();String id = list.get(i).getId().trim();Thread t = new Th(terminal, id, ip, executeCommand, ts);pool.execute(t);}//关闭连接池pool.shutdown();} catch (Exception e) {e.printStackTrace();}}}

上面的代码中,利用了ExecutorService来执行各个线程。

在Th类中,就是完成了我的ping命令:在ping的时候,使用-w参数来设置超时时间。

原创粉丝点击