java 多線程獲取返回值 java如何實(shí)現(xiàn)了cmd多條命令交互操作?
java如何實(shí)現(xiàn)了cmd多條命令交互操作?在java中動(dòng)態(tài)鏈接庫操作系統(tǒng)的程序時(shí),可以使用().exec()來利用,但是這個(gè)方法在動(dòng)態(tài)鏈接庫命令后就真接直接返回當(dāng)前線程了;程序設(shè)計(jì)時(shí),總是必須在再等待
java如何實(shí)現(xiàn)了cmd多條命令交互操作?
在java中動(dòng)態(tài)鏈接庫操作系統(tǒng)的程序時(shí),可以使用().exec()來利用,但是這個(gè)方法在動(dòng)態(tài)鏈接庫命令后就真接直接返回當(dāng)前線程了;程序設(shè)計(jì)時(shí),總是必須在再等待動(dòng)態(tài)創(chuàng)建的系統(tǒng)程序成功操作后,當(dāng)前線程才能做接下來不能操作,此時(shí)也可以用類Process的方法waitFor()來實(shí)現(xiàn),它會(huì)阻塞住當(dāng)先線程至使調(diào)用程序運(yùn)行結(jié)束后process().exec()//負(fù)責(zé)執(zhí)行命令生成cubetry{
process.waitFor()
}catch(InterruptedExceptione){
//TODOAuto-referencedcatchblock
()
}
proc_statcheckFileSize()?1:3
[java]viewplain內(nèi)容復(fù)制
process().exec()//執(zhí)行命令生成cube
try{
process.waitFor()
}catch(InterruptedExceptione){
//TODOAuto-definedcatchblock
()
}
proc_statcheckFileSize()?1:3
Process的方法waitFor()介紹,語出API文檔:
waitFor
employeeabstractintwaitFor()
throwsInterruptedException導(dǎo)致當(dāng)前線程耐心的等待,要是必要,一直在要等待由該P(yáng)rocess對(duì)象表示的進(jìn)程早就暫時(shí)終止。如果已強(qiáng)制停止該子進(jìn)程,此方法立玄回。如果沒有是沒有重新開啟該子進(jìn)程,動(dòng)態(tài)創(chuàng)建的線程將被阻塞,直到此時(shí)解盟子進(jìn)程。
回:
進(jìn)程的出口值。根據(jù)慣例,0它表示正常嗎強(qiáng)制停止。
一拋:
InterruptedException-如果當(dāng)前線程在靜靜的等待時(shí)被另一線程網(wǎng)絡(luò)中斷,則突然停止等待,拋出InterruptedException。
自我實(shí)踐:
負(fù)責(zé)執(zhí)行多條cmd命令
Stringcmdcmd/cG:ampampcdG:projectstestProjectampampstartmvnpackage
Processprocess().exec(cmd)
process.waitFor()
process.exitValue()
這樣是可以想執(zhí)行多條命令。
值得注意的是:先執(zhí)行startmvnpackage,會(huì)開啟窗口,調(diào)用process.waitFor(),主線程不可能被阻塞,只不過是會(huì)返回想執(zhí)行成功process.exitValue()0
將startmvnpackage中start去掉后,主線程就會(huì)阻塞,待到cmd命令啟動(dòng)的子進(jìn)程執(zhí)行完畢,然后把先執(zhí)行主線程。
多線程怎么得到返回值?
線程的返回值問題,最實(shí)現(xiàn)理想的辦法應(yīng)該是線程來通知到調(diào)度線程,這個(gè)指揮調(diào)度線程是可以是主線程,也這個(gè)可以是一個(gè)一類的調(diào)度線程,突然之間任務(wù)線程完成了自己的工作,就安排調(diào)度線程來取結(jié)果,那樣的話才能可以發(fā)揮出多線程的優(yōu)勢(shì),而不是在那里傻等。
如果沒有你把主線程拿出來調(diào)度線程,而你的主線程存在地消息循環(huán),這樣的話,利用消息那就是另一個(gè)確實(shí)不錯(cuò)的通知。
任務(wù)線程成功了工作之后,向主線程發(fā)消息,消息中可以把任務(wù)線程本身(線程類)發(fā)給主線程,然后再在主線程中收起這個(gè)線程類,接著我得到任務(wù)線程的處理結(jié)果。