Taki oto kod:
public class CommandLine implements Runnable{
Ip ip;
Settings settins = new Settings();
Settings s = new Settings();
public CommandLine(Ip ip) throws IOException, InterruptedException {
this.ip=ip;
String command = "ping -n "+s.getNumberOfPingCycles()+" "+ip.ip;
StringBuffer output = new StringBuffer();
Process p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String outputLine = "";
while ((outputLine = reader.readLine())!= null) {
output.append(outputLine);
System.out.println(outputLine); }
}
@Override
public void run() {
try {
new CommandLine(ip);
} catch (IOException ex) {Logger.getLogger(CommandLine.class.getName()).log(Level.SEVERE, null, ex);
} catch (InterruptedException ex) {Logger.getLogger(CommandLine.class.getName()).log(Level.SEVERE, null, ex);}}
}
Proste polecenie ping sprawdzające odpowiedz adresów sieciowy. Jako że ustawiam ilość cykli np na 200 troche to trwa. Adresów do sprawdzenia też mam koło 300. Cała operacja zajmie więc kilka godzin, dlatego chce uruchomic jednocześnie ping dla wszystkich adresów z puli co znacznie skróci mi czas. Wymysliłem sobie że uruchomie to w wątkach o tak:
ArrayList<Ip> ipList = r.getIpListFromExcel();
Thread[] watki = new Thread[ipList.size()];
for(int i =0 ; i<ipList.size(); i++){
watki[i] = new Thread(new CommandLine(ipList.get(i)));
}
for(int i =0 ; i<ipList.size(); i++){
watki[i].start();
}
Niestety działaja tylko dwa wątki jednocześnie (domysla się że to od liczby rdzeni procesora). Czy mój pomysł jest możliwy do wykonania, niestety z wątkami nie mam dużo doświadczeń.