I have a Runnable object, that runs a ping operation -
Runnable r1 = new Runnable() {
@Override
public void run() {
try{
List<String> commands = new ArrayList<String>();
commands.add("ping");
commands.add("-c");
commands.add("10");
commands.add("google.com");
System.out.println("Before process");
ProcessBuilder builder = new ProcessBuilder(commands);
Process process = builder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
while ((line=reader.readLine()) != null){
System.out.println(line);
}
process.waitFor();
System.out.println("After process");
}catch (Exception ex){
ex.printStackTrace();
}
}
};
If I launch this in current thread like this:
r1.run();
I get this output:
Before process
PING google.com (173.194.32.33): 56 data bytes
64 bytes from 173.194.32.33: icmp_seq=0 ttl=53 time=34.857 ms
64 bytes from 173.194.32.33: icmp_seq=1 ttl=53 time=39.550 ms
64 bytes from 173.194.32.33: icmp_seq=2 ttl=53 time=44.212 ms
64 bytes from 173.194.32.33: icmp_seq=3 ttl=53 time=38.111 ms
64 bytes from 173.194.32.33: icmp_seq=4 ttl=53 time=39.622 ms
64 bytes from 173.194.32.33: icmp_seq=5 ttl=53 time=41.391 ms
64 bytes from 173.194.32.33: icmp_seq=6 ttl=53 time=41.280 ms
64 bytes from 173.194.32.33: icmp_seq=7 ttl=53 time=39.645 ms
64 bytes from 173.194.32.33: icmp_seq=8 ttl=53 time=35.931 ms
64 bytes from 173.194.32.33: icmp_seq=9 ttl=53 time=38.245 ms
--- google.com ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 34.857/39.284/44.212/2.575 ms
After process
But if I run it in a new thread like this:
Thread thread = new Thread(r1);
thread.start();
I get this:
Before process
Why are the outputs different?
If you run in separate thread, your main thread will probably finish before, so your r1
will not have enough time to finish. If you start in current thread you will wait until finish. Try to add thread.join()
after start and see what is happening.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With