qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Java程序運行超時后退出或進行其他操作的實現

           當程序進入死循環或者由于其他原因無法自行終止的時候,就需要強制退出程序了。
            對于開發軟件 Eclipse ,在程序執行超時后,可以點擊 Terminate 按鈕強制退出。
            那么,我們可不可以通過程序設置一定的時間,當程序運行超過該時長后自行終止或者進行其他操作呢?
            查了大量資料后發現,Future類就能滿足這個需求。
            Future類中重要方法包括get()和cancel()。
            get()獲取數據對象,如果數據沒有加載,就會阻塞直到取到數據,而 cancel()是取消數據加載。
            另外一個get(timeout)操作,表示如果在timeout時間內沒有取到就失敗返回,而不再阻塞。
            通過這些方法即可實現我們要求。
            Java 代碼示例:
          final ExecutorService exec = Executors.newFixedThreadPool(1);
          Callable call = new Callable() {
          public String call() throws Exception {
          // 放入耗時操作代碼塊
          int cash = 300;
          String name = "張三";
          System.out.println(name + "現在有" + cash + "元存款");
          User u = new User(name, cash);
          String[] arr = { "線程A", "線程B", "線程C", "線程D", "線程E", "線程F",
          "線程G", "線程H", "線程I", "線程J" };
          for (int i = 0; i < 10; i++) {
          MyThread th = new MyThread(arr[i], u,
          (int) (Math.random() * 1000 - 500));
          th.start();
          }
          //耗時代碼塊結束
          Thread.sleep(1000 * 5);
          return "線程執行完成";
          }
          };
          try {
          Future future = exec.submit(call);
          String obj = future.get(1000 * 1, TimeUnit.MILLISECONDS); // 任務處理超時時間設為1 秒
          System.out.println("任務成功返回:" + obj);
          } catch (TimeoutException ex) {
          System.out.println("處理超時啦....");
          System.exit(0);
          } catch (Exception e) {
          System.out.println("處理失敗.");
          e.printStackTrace();
          }
          exec.shutdown(); // 關閉線程池
          將耗時的代碼塊放入標注的地方后,即可滿足要求。
          System.out.println("處理失敗.");
          e.printStackTrace();
          System.out.println("處理失敗.");
          e.printStackTrace();
            在該示例程序中,當運行超時后,執行的是退出程序的操作。
            也可以根據需要放入其他代碼進行相關操作。
            例如可以設置當處理超時時就忽略 該錯誤繼續向下執行

          posted on 2013-09-27 10:36 順其自然EVO 閱讀(203) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2013年9月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 秦皇岛市| 桂阳县| 师宗县| 南靖县| 花垣县| 鄂伦春自治旗| 潮安县| 茌平县| 皋兰县| 海城市| 临颍县| 辉县市| 黎川县| 阳朔县| 扶沟县| 永丰县| 榆树市| 芮城县| 当雄县| 潮州市| 密山市| 洛隆县| 怀宁县| 子洲县| 周口市| 永春县| 卢龙县| 皋兰县| 屯留县| 中方县| 日喀则市| 开封县| 五华县| 永济市| 兴国县| 平舆县| 镇康县| 西吉县| 兴安盟| 长岭县| 特克斯县|