qileilove

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

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

           當程序進入死循環(huán)或者由于其他原因無法自行終止的時候,就需要強制退出程序了。
            對于開發(fā)軟件 Eclipse ,在程序執(zhí)行超時后,可以點擊 Terminate 按鈕強制退出。
            那么,我們可不可以通過程序設置一定的時間,當程序運行超過該時長后自行終止或者進行其他操作呢?
            查了大量資料后發(fā)現,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 "線程執(zhí)行完成";
          }
          };
          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();
            在該示例程序中,當運行超時后,執(zhí)行的是退出程序的操作。
            也可以根據需要放入其他代碼進行相關操作。
            例如可以設置當處理超時時就忽略 該錯誤繼續(xù)向下執(zhí)行

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


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


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

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 若尔盖县| 金昌市| 青川县| 平泉县| 武城县| 宁津县| 黑河市| 乐亭县| 沽源县| 萍乡市| 莎车县| 石河子市| 汨罗市| 汝城县| 固镇县| 临海市| 东乡| 土默特右旗| 九江县| 奈曼旗| 嘉义县| 项城市| 德清县| 彰武县| 内黄县| 股票| 美姑县| 赤城县| 邹平县| 射洪县| 恭城| 涟水县| 张家界市| 秦皇岛市| 宿州市| 信丰县| 益阳市| 乐业县| 龙川县| 临邑县| 平邑县|