国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

主題:java.util.concurrent包開發實例

2019-11-17 03:57:11
字體:
來源:轉載
供稿:網友
從JDK5.0開始,JDK中加入了并發包,最近剛開始使用。感覺對于應用開發非常方便。在開發過程中,我自己碰到兩種情況的應用場景。就從應用場景來分析concurrent包的應用。

場景一:任務的定時、延時執行。比如指定某個狀態檢查的任務程序定時執行。

場景二:有多任務同時提交,而且這些任務相互獨立。這些任務可以并行執行的,但是,各個任務最終需要返回執行的結果。

場景一是非常常見的,當然也已經有很多成熟的機制來實現它,比如:定時器Timer。在并發包中接口java.util.concurrent.

ScheduledExecutorService可以非常輕松地完成定時,延時執行,同時可以返回執行結果。通過ScheduledFuture接口跟蹤任務執行情況,并獲取執行結果。
例如:如下代碼:

import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
    PRivate final ScheduledExecutorService scheduler =
       Executors.newScheduledThreadPool(1);

    public void beepForAnHour() {
        final Runnable beeper = new Runnable() {
                public void run() { System.out.println("beep"); }
            };
        final ScheduledFuture<?> beeperHandle =
            scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
        scheduler.schedule(new Runnable() {
                public void run() { beeperHandle.cancel(true); }
            }, 60 * 60, SECONDS);
    }
}
場景二中,對于并發執行其實并不難,但是如果說要得到執行結果,就比較復雜,主要困難在于任務執行完之后如何獲取執行結果,所有任務執行結束之后,如何提醒父進程。在并發實用包中提供的ExecutorService 接口來發起任務,及得到跟蹤任務的執行狀況的Future的方法。

實例代碼如下:

class App {
   ExecutorService executor = ...
   ArchiveSearcher searcher = ...
   void showSearch(final String target) throws InterruptedException {
     Future<String> future = executor.submit(new Callable<String>() {
         public String call() { return searcher.search(target); }
     });
     displayOtherThings(); // do other things while searching
     try {
       displayText(future.get()); // use future
     } catch (ExecutionException ex) { cleanup(); return; }
   }
}
這里實現的Future對象,在取結果的時候是阻塞的,直到該項任務返回結果。因此只要對獲取的future對象做操作,即可以控制程序的執行順序。

最后寫一些想法:其實并發程序在很多時候能夠極大地加快執行的效率,現在比較流行的多機器聯合工作,其實完全可以用這套并行機制來實現。分服務器和任務機,服務器負責分解任務,任務機負責執行任務并返回結果,服務器負責收集結果并且整合。對于簡單模型的可拆解任務,完全可以實現。對于復雜的如:多個結果間具有順序關系,結果相互影響等就比較麻煩。



本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/qiuqiu73/archive/2009/12/17/5028485.aspx
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北流市| 武强县| 龙门县| 乌鲁木齐市| 永胜县| 长汀县| 弥渡县| 长海县| 新丰县| 上杭县| 三江| 阿拉善盟| 南丰县| 乌拉特后旗| 南皮县| 渭南市| 呼和浩特市| 永城市| 南皮县| 海晏县| 长垣县| 凌源市| 灵山县| 加查县| 和田市| 达尔| 石嘴山市| 双柏县| 望谟县| 河源市| 商河县| 聂荣县| 上杭县| 贺兰县| 邹平县| 武川县| 玉环县| 鹤山市| 上栗县| 南通市| 济宁市|