內(nèi)蒙古java團隊

          j2se,j2ee開發(fā)組
          posts - 139, comments - 212, trackbacks - 0, articles - 65
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          對于開發(fā)軟件 Eclipse ,在程序執(zhí)行超時后,可以點擊 Terminate 按鈕強制退出。

            那么,我們可不可以通過程序設(shè)置一定的時間,當(dāng)程序運行超過該時長后自行終止或者進行其他操作呢?

            查了大量資料后發(fā)現(xiàn),F(xiàn)uture類就能滿足這個需求。

            Future類中重要方法包括get()和cancel()。

            get()獲取數(shù)據(jù)對象,如果數(shù)據(jù)沒有加載,就會阻塞直到取到數(shù)據(jù),而 cancel()是取消數(shù)據(jù)加載。

            另外一個get(timeout)操作,表示如果在timeout時間內(nèi)沒有取到就失敗返回,而不再阻塞。

            通過這些方法即可實現(xiàn)我們要求。

            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 + "現(xiàn)在有" + 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();

            }

            //耗時代碼塊結(jié)束

            Thread.sleep(1000 * 5);

            return "線程執(zhí)行完成";

            }

            };

            try {

            Future future = exec.submit(call);

            String obj = future.get(1000 * 1, TimeUnit.MILLISECONDS); // 任務(wù)處理超時時間設(shè)為1 秒

            System.out.println("任務(wù)成功返回:" + obj);

            } catch (TimeoutException ex) {

            System.out.println("處理超時啦....");

            System.exit(0);

            } catch (Exception e) {

            System.out.println("處理失敗.");

            e.printStackTrace();

            }

            exec.shutdown(); // 關(guān)閉線程池

            將耗時的代碼塊放入標(biāo)注的地方后,即可滿足要求。

            System.out.println("處理失敗.");

            e.printStackTrace();

            System.out.println("處理失敗.");

            e.printStackTrace();

            在該示例程序中,當(dāng)運行超時后,執(zhí)行的是退出程序的操作。

            也可以根據(jù)需要放入其他代碼進行相關(guān)操作。

            例如可以設(shè)置當(dāng)處理超時時就忽略 該錯誤繼續(xù)向下執(zhí)行

          主站蜘蛛池模板: 普宁市| 扶绥县| 江城| 梓潼县| 上高县| 武功县| 丽江市| 孝昌县| 社会| 盘山县| 噶尔县| 泽州县| 福鼎市| 潢川县| 南漳县| 丹江口市| 陆丰市| 新安县| 长沙市| 巴林右旗| 淮南市| 平遥县| 敦煌市| 怀集县| 杨浦区| 甘洛县| 淮南市| 贵定县| 亳州市| 尼木县| 海门市| 双柏县| 武川县| 德钦县| 巍山| 阿合奇县| 闽侯县| 高邮市| 光泽县| 合肥市| 响水县|