久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    JDK1.5新特性——java.util.concurrent 線程池(1)

     goldbomb 2008-01-13

    JDK5中的一個(gè)亮點(diǎn)就是將Doug Lea并發(fā)庫引入到Java標(biāo)準(zhǔn)庫中。Doug Lea確實(shí)是一個(gè)牛人,能教書,能出書,能編碼,不過這在國外還是比較普遍的,而國內(nèi)的教授們就相差太遠(yuǎn)了。

    一般的服務(wù)器都需要線程池,比如Web、FTP等服務(wù)器,不過它們一般都自己實(shí)現(xiàn)了線程池,比如以前介紹過的Tomcat、Resin和Jetty等,現(xiàn)在有了JDK5,我們就沒有必要重復(fù)造車輪了,直接使用就可以,何況使用也很方便,性能也非常高。

    package concurrent;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    public class TestThreadPool {
      public static void main(String args[]) throws InterruptedException {
        // only two threads
        ExecutorService exec = Executors.newFixedThreadPool(2);
        for(int index = 0; index < 100; index++) {
          Runnable run = new Runnable() {
            public void run() {
              long time = (long) (Math.random() 1000);
              System.out.println("Sleeping " + time + "ms");
                try {
                  Thread.sleep(time);
                catch (InterruptedException e) {
                }
            }
          };
          exec.execute(run);
        }
        // must shutdown
        exec.shutdown();
      }
    }

    上面是一個(gè)簡單的例子,使用了2個(gè)大小的線程池來處理100個(gè)線程。但有一個(gè)問題:在for循環(huán)的過程中,會(huì)等待線程池有空閑的線程,所以主線程會(huì)阻塞的。為了解決這個(gè)問題,一般啟動(dòng)一個(gè)線程來做for循環(huán),就是為了避免由于線程池滿了造成主線程阻塞。不過在這里我沒有這樣處理。[重要修正:經(jīng)過測試,即使線程池大小小于實(shí)際線程數(shù)大小,線程池也不會(huì)阻塞的,這與Tomcat的線程池不同,它將Runnable實(shí)例放到一個(gè)“無限”的BlockingQueue中,所以就不用一個(gè)線程啟動(dòng)for循環(huán),Doug Lea果然厲害]

    另外它使用了Executors的靜態(tài)函數(shù)生成一個(gè)固定的線程池,顧名思義,線程池的線程是不會(huì)釋放的,即使它是Idle。這就會(huì)產(chǎn)生性能問題,比如如果線程池的大小為200,當(dāng)全部使用完畢后,所有的線程會(huì)繼續(xù)留在池中,相應(yīng)的內(nèi)存和線程切換(while(true)+sleep循環(huán))都會(huì)增加。如果要避免這個(gè)問題,就必須直接使用ThreadPoolExecutor()來構(gòu)造。可以像Tomcat的線程池一樣設(shè)置“最大線程數(shù)”、“最小線程數(shù)”和“空閑線程keepAlive的時(shí)間”。通過這些可以基本上替換Tomcat的線程池實(shí)現(xiàn)方案。

    需要注意的是線程池必須使用shutdown來顯式關(guān)閉,否則主線程就無法退出。shutdown也不會(huì)阻塞主線程。

     

    多長時(shí)間運(yùn)行的應(yīng)用有時(shí)候需要定時(shí)運(yùn)行任務(wù)完成一些諸如統(tǒng)計(jì)、優(yōu)化等工作,比如在電信行業(yè)中處理用戶話單時(shí),需要每隔1分鐘處理話單;網(wǎng)站每天凌晨統(tǒng)計(jì)用戶訪問量、用戶數(shù);大型超時(shí)凌晨3點(diǎn)統(tǒng)計(jì)當(dāng)天銷售額、以及最熱賣的商品;每周日進(jìn)行數(shù)據(jù)庫備份;公司每個(gè)月的10號(hào)計(jì)算工資并進(jìn)行轉(zhuǎn)帳等,這些都是定時(shí)任務(wù)。通過 java的并發(fā)庫concurrent可以輕松的完成這些任務(wù),而且非常的簡單。

    package concurrent;
    import static java.util.concurrent.TimeUnit.SECONDS;
    import java.util.Date;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.ScheduledFuture;
    public class TestScheduledThread {
      public static void main(String[] args) {
        final ScheduledExecutorService scheduler = Executors
            .newScheduledThreadPool(2);
        final Runnable beeper = new Runnable() {
          int count = 0;
          public void run() {
            System.out.println(new Date() " beep " (++count));
          }
        };
        // 1秒鐘后運(yùn)行,并每隔2秒運(yùn)行一次
        final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(
            beeper, 12, SECONDS);
        // 2秒鐘后運(yùn)行,并每次在上次任務(wù)運(yùn)行完后等待5秒后重新運(yùn)行
        final ScheduledFuture<?> beeperHandle2 = scheduler
            .scheduleWithFixedDelay(beeper, 25, SECONDS);
        // 30秒后結(jié)束關(guān)閉任務(wù),并且關(guān)閉Scheduler
        scheduler.schedule(new Runnable() {
          public void run() {
            beeperHandle.cancel(true);
            beeperHandle2.cancel(true);
            scheduler.shutdown();
          }
        }30, SECONDS);
      }
    }

    為了退出進(jìn)程,上面的代碼中加入了關(guān)閉Scheduler的操作。而對(duì)于24小時(shí)運(yùn)行的應(yīng)用而言,是沒有必要關(guān)閉Scheduler的。

      本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評(píng)論

      發(fā)表

      請(qǐng)遵守用戶 評(píng)論公約

      類似文章 更多

      主站蜘蛛池模板: 亚洲人妻中文字幕一区| 人妻日韩人妻中文字幕| 另类专区一区二区三区| 亚洲 国产 制服 丝袜 一区| 亚洲午夜无码久久久久蜜臀AV | 亚洲精品无码久久久久去Q| 男女爽爽无遮挡午夜视频| 国产福利在线观看免费第一福利| 亚洲午夜福利AV一区二区无码| 久久精品国产一区二区三区不卡| 国产综合久久99久久| 免费人成在线观看网站| 国色天香成人一区二区 | 一夲道无码人妻精品一区二区| 久久香蕉国产线看观看怡红院妓院 | 秋霞电影院午夜无码免费视频| 国产精品久久久天天影视香蕉| 97成人碰碰久久人人超级碰oo| 亚洲乱码一卡二卡卡3卡4卡| 久草热8精品视频在线观看| 国产免费一区二区三区不卡| 强奷漂亮人妻系列老师 | 精品无码久久久久国产| 亚洲人妻精品一区二区| 欧美乱妇高清无乱码免费| 国产精品成人午夜福利| 久亚洲一线产区二线产区三线产区 | 精品一区二区免费不卡| 国产丝袜视频一区二区三区 | 国产乱码1卡二卡3卡四卡5| 又粗又黑又大的吊AV| 人妻人人做人做人人爱| 精品中文人妻在线不卡| 精品玖玖玖视频在线观看| 免费VA国产高清大片在线| 亚洲中文久久久精品无码| 中文字幕无码中文字幕有码A| 国产精品福利自产拍久久| 中文字幕国产在线精品| 精品人妻中文无码AV在线| 中文字幕无线码中文字幕免费|