java process是什么?一起來(lái)看看小編今天的分享吧!
在項(xiàng)目開發(fā)中,經(jīng)常會(huì)遇到調(diào)用其它程序功能的業(yè)務(wù)需求,在java中通常有兩種實(shí)現(xiàn)方法,包括:
Runtime?runtime?=?Runtime.getRuntime(); Process?p?=runtime.exec(cmd);
和
Process?p=new?ProcessBuilder(cmd).start();
在這里就需要認(rèn)識(shí)一下process類,process是一個(gè)抽象的類,它包含6個(gè)抽象的方法:
abstract??voiddestroy()? ??????????殺掉子進(jìn)程。 abstract??intexitValue()? ??????????返回子進(jìn)程的出口值。 abstract??InputStreamgetErrorStream()? ??????????獲取子進(jìn)程的錯(cuò)誤流。 abstract??InputStreamgetInputStream()? ??????????獲取子進(jìn)程的輸入流。 abstract??OutputStreamgetOutputStream()? ??????????獲取子進(jìn)程的輸出流。 abstract??intwaitFor()? ??????????導(dǎo)致當(dāng)前線程等待,如有必要,一直要等到由該?Process?對(duì)象表示的進(jìn)程已經(jīng)終止。
以“ping?百度網(wǎng)址”為例:
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("任務(wù)執(zhí)行完畢!"); ??????????????}?catch?(IOException?e)?{ ???????????????????????????????????????//?TODO?Auto-generated?catch?block ???????????????????????????????????????e.printStackTrace(); ??????????????} ???????} }
由于Process提供了WaitFor和getInputStream兩個(gè)方法,這兩個(gè)方法都阻塞java線程,使調(diào)用ping被掛到后臺(tái)運(yùn)行,程序直接打印“任務(wù)執(zhí)行完畢!”,而我們想要的效果是先把ping操作執(zhí)行完成后,再輸出“任務(wù)執(zhí)行完畢!”,可以等待腳本返回或結(jié)束后,再繼續(xù)執(zhí)行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("任務(wù)執(zhí)行完畢!"); ?????????????????????}?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("任務(wù)執(zhí)行完畢!"); ??????????}?catch?(IOException?e)?{ ??????????????//?TODO?Auto-generated?catch?block ??????????????e.printStackTrace(); ??????????}?catch?(InterruptedException?e)?{ ??????????????????????????????????????????????????????????//?TODO?Auto-generated?catch?block ??????????????e.printStackTrace(); ??????????} ?????} }
這樣就完成了process的Java程序操作。
以上就是小編今天的分享了,希望可以幫助到大家。