java process是什么?一起来看看小编今天的分享吧!
在项目开发中,经常会遇到调用其它程序功能的业务需求,在java中通常有两种实现方法,包括:
Runtime runtime = Runtime.getRuntime(); Process p =runtime.exec(cmd);
和
Process p=new ProcessBuilder(cmd).start();
在这里就需要认识一下process类,process是一个抽象的类,它包含6个抽象的方法:
abstract voiddestroy() 杀掉子进程。 abstract intexitValue() 返回子进程的出口值。 abstract InputStreamgetErrorStream() 获取子进程的错误流。 abstract InputStreamgetInputStream() 获取子进程的输入流。 abstract OutputStreamgetOutputStream() 获取子进程的输出流。 abstract intwaitFor() 导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。
以“ping 百度网址”为例:
import java.io.IOException; public class ProcessDemo { public static void main(String[] args) { try { Process process = Runtime.getRuntime().exec("ping www.baidu.com"); System.out.println("任务执行完毕!"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
由于Process提供了WaitFor和getInputStream两个方法,这两个方法都阻塞java线程,使调用ping被挂到后台运行,程序直接打印“任务执行完毕!”,而我们想要的效果是先把ping操作执行完成后,再输出“任务执行完毕!”,可以等待脚本返回或结束后,再继续执行java程序:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ProcessDemo { public static void main(String[] args) { try { Process process = Runtime.getRuntime().exec("ping www.baidu.com"); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream(),"gbk")); String line; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); } System.out.println("任务执行完毕!"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
import java.io.IOException; public class ProcessDemo { public static void main(String[] args) { try { Process process = Runtime.getRuntime().exec("ping www.baidu.com"); process.waitFor(); System.out.println("任务执行完毕!"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
这样就完成了process的Java程序操作。
以上就是小编今天的分享了,希望可以帮助到大家。