欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 進程執(zhí)行外部程序造成阻塞的一種原因

 更新時間:2014年03月24日 08:48:47   作者:  
前一陣子在研究文檔展示時使用了java進程直接調(diào)用外部程序,其中遇到一個問題花了好長時間才解決,這個問題就是外部程序直接執(zhí)行沒什么問題,但是當使用Java進程執(zhí)行時外部程序就阻塞在那兒不動了。而且這個外部程序在處理某些文件時使用Java進程執(zhí)行是沒問題的
查了好多資料,差點就動手翻Java源碼了,最后結(jié)合一篇文章(忘記出處了),想到了輸出流會阻塞進程執(zhí)行。 Java進程執(zhí)行有一個輸入流,兩個輸出流(相對于外部程序)。當兩個輸出流有內(nèi)容輸出,而Java執(zhí)行程序沒有及時清空輸出流時就會阻塞進程。
現(xiàn)貼出代碼,希望能幫助到有需要的同行:

復制代碼 代碼如下:
/**
  * pdf轉(zhuǎn)swf函數(shù)
  * @param path 輸入輸出文件路徑
  * @param inputFileName 輸入文件名
  * @param outputFileName 輸出文件名
  * @return File 生成的swf文件
  */
 private static File toSwf(String sourceFile, String destFile, String command) {
  long beginTime = System.nanoTime();
  Runtime rt = Runtime.getRuntime();
  try {
   Process process = rt.exec(command);

   final InputStream isNormal = process.getInputStream();
   new Thread(new Runnable() {
       public void run() {
           BufferedReader br = new BufferedReader(new InputStreamReader(isNormal));
           StringBuilder buf = new StringBuilder();
     String line = null;
     try {
      while((line = br.readLine()) != null){
       buf.append(line + "\n");
      }
     } catch (IOException e) {
      e.printStackTrace();
     }
     System.out.println("輸出結(jié)果為:" + buf);
       }
   }).start(); // 啟動單獨的線程來清空process.getInputStream()的緩沖區(qū)

   InputStream isError = process.getErrorStream();
   BufferedReader br2 = new BufferedReader(new InputStreamReader(isError));
   StringBuilder buf = new StringBuilder();
   String line = null;
   while((line = br2.readLine()) != null){
    buf.append(line + "\n");
   }
   System.out.println("錯誤輸出結(jié)果為:" + buf);

   try {
    process.waitFor();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }

  } catch (IOException e) {
   e.printStackTrace();
  }
  long endTime = System.nanoTime();
  System.out.println("轉(zhuǎn)swf耗時: " + (endTime - beginTime) / 1000000000 + " 秒  " + sourceFile);
  return new File(destFile);
 }

相關文章

  • java正則表達式處理花括號內(nèi)容替換賦值問題

    java正則表達式處理花括號內(nèi)容替換賦值問題

    這篇文章主要介紹了java正則表達式處理花括號內(nèi)容替換賦值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • java 重載(overload)與重寫(override)詳解及實例

    java 重載(overload)與重寫(override)詳解及實例

    這篇文章主要介紹了java 重載(overload)與重寫(override)詳解及實例的相關資料,并附實例代碼,需要的朋友可以參考下
    2016-10-10
  • JDK8中Optional類巧用之判空操作

    JDK8中Optional類巧用之判空操作

    善用Optional可以使我們代碼中很多繁瑣、丑陋的設計變得十分優(yōu)雅,這篇文章主要給大家介紹了JDK8中Optional類巧用之判空的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • 詳解Springboot之整合JDBCTemplate配置多數(shù)據(jù)源

    詳解Springboot之整合JDBCTemplate配置多數(shù)據(jù)源

    這篇文章主要介紹了詳解Springboot之整合JDBCTemplate配置多數(shù)據(jù)源,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • springboot返回html和jsp的方法示例

    springboot返回html和jsp的方法示例

    這篇文章主要介紹了springboot返回html和jsp的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Java經(jīng)典面試題匯總:Spring

    Java經(jīng)典面試題匯總:Spring

    本篇總結(jié)的是Spring框架相關的面試題,后續(xù)會持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實習生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯誤還望大家多多包涵,不吝賜教,謝謝
    2021-07-07
  • maven實現(xiàn)jar包導入+導出方式

    maven實現(xiàn)jar包導入+導出方式

    這篇文章主要介紹了maven實現(xiàn)jar包導入+導出方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Spring?Boot?優(yōu)雅整合多數(shù)據(jù)源

    Spring?Boot?優(yōu)雅整合多數(shù)據(jù)源

    這篇文章主要介紹了Spring?Boot?優(yōu)雅整合多數(shù)據(jù)源,多數(shù)據(jù)源就是在一個單一應用中涉及到了兩個及以上的數(shù)據(jù)庫,更多相關內(nèi)容需要的小伙伴可以參考下面文章介紹
    2022-05-05
  • Java實現(xiàn)多線程中的靜態(tài)代理模式

    Java實現(xiàn)多線程中的靜態(tài)代理模式

    靜態(tài)代理屬于設計模式中的代理模式。這篇文章主要介紹了Java實現(xiàn)多線程中的靜態(tài)代理模式,詳細的介紹了靜態(tài)代理的使用,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • 在CentOS系統(tǒng)上安裝Java的openjdk的方法

    在CentOS系統(tǒng)上安裝Java的openjdk的方法

    這篇文章主要介紹了在CentOS系統(tǒng)上安裝Java的openjdk的方法,同樣適用于Fedora等其他RedHat系的Linux系統(tǒng),需要的朋友可以參考下
    2015-06-06

最新評論