问题描述
- java关于socket 多线程的问题
-
现在是指定一个时间,应用启动就开始定时扫描,隔一分钟扫描一次,到了指定的时间我就需要去Ping两千多台电脑,用多线程处理,每个线程负责50个。我该怎么处理?各位大神们,先说说思路再给我写点简单的代码啊。救急啊,我第一次搞这些东西完全不会额。
解决方案
public class Tdd {
private static ScheduledThreadPoolExecutor es = new ScheduledThreadPoolExecutor(10) ;
public void start() {
for (int i = 0 ;i <10 ;i++) {
es.scheduleWithFixedDelay(new Runnable() {
public void run() {
// 分配ip
String[] ips = new String[] { "" };
// ping 去吧
System.out.println("11");
}
}, 1, 1, TimeUnit.SECONDS);
}
}
public static void main(String args[]) {
new Tdd().start();
}
}
你是想用 Runtime.exec("ping xxx") ? 这样吗,小心内存溢出。而且 机器之间 是否通畅 本不应该由 应用程序来 担当啊。
解决方案二:
Java的Socket网络编程以及多线程
Java socket多线程
java socket 多线程网络传输多个文件
解决方案三:
(应用启动就开始定时扫描,隔一分钟扫描一次,到了指定的时间我就需要去Ping两千多台电脑)--》这个部分可以利用spring quartz写一个定时任务;
然后定时任务中的业务逻辑就是处理-->(到了指定的时间我就需要去Ping两千多台电脑,用多线程处理,每个线程负责50个),这个部分可以运用线程池,
自己定义一个线程池,2000多台电脑,每个线程处理50个的话,可以将线程池的大小定义在40个左右,具体的根据实际情况而定,
解决方案四:
先定义一个队列,存放各服务器信息
定义线程池
开启一监控线程,在队列中寻找已到时的记录,如果线程池为空,则开启一个线程用于处理记录,如果线程池满则等待。
用系统自带的ping命令不太合适,最好自已找一个ping的代码,网上有很多,找找就行了。
时间: 2024-09-12 09:11:53