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

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

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

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

监控节点网络连接状况----ping的使用以及使用Java线程池并发_第1张图片

其中,-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参数来设置超时时间。

你可能感兴趣的:(监控节点网络连接状况----ping的使用以及使用Java线程池并发)