posts - 39,  comments - 44,  trackbacks - 0
                    J2SE 5.0中的Java.util.concurrent程序包提供了一個新的線程框架組件,這個框架組件處理了與建立、執(zhí)行和管理線程相關的很多低層細節(jié)信息。在本文中我們將細致地了解一下它的重要特性。

            如果你使用C、C++或Java先前的版本進行多線程編程,就知道在代碼中管理線程是多么頭疼的事情。在單線程程序中,代碼中引起應用程序失敗的bug每次都在同一個點出現(xiàn)。但是在多線程程序中,只有某些原因遇到一起的時候才會出現(xiàn)失敗。由于預見可能引發(fā)應用程序失敗的所有條件是非常困難的,所以多線程編程是有挑戰(zhàn)性的。有些程序員從根本上避免這種挑戰(zhàn),而另外一些--聰明的解決問題的人員--則一直坐在他們的計算機面前直到問題解決。

            J2SE 5.0平臺包含了一個新的并發(fā)工具程序包。這個程序包中的類替并發(fā)類(concurrent classe)或并發(fā)設計中使用的應用程序建立阻塞(blocking)。該并發(fā)工具包含下面一些內(nèi)容:

            · 高性能的、靈活的線程池

            · 異步執(zhí)行事務的框架組件

            · 為并發(fā)訪問優(yōu)化過的集合類宿主(host)

            本文介紹了J2SE 5.0框架組件類和它們的重要特性。本文的下載代碼提供了一些簡單的、容易使用的示例,它演示了所有的新線程框架組件類。你在閱讀文章內(nèi)容之后運行這些示例可以使自己對這些特性有更好的理解。

            Executor(執(zhí)行器)框架組件

            Executor框架組件提供了一個簡單的、標準的、可擴充的類,它提供了一些有用的功能,如果沒有這些功能,我們要手工實現(xiàn)這些它們,會覺得十分單調(diào)和困難。該框架組件使調(diào)用、調(diào)度和執(zhí)行的操作標準化了。它通過一組執(zhí)行策略為控制異步事務提供了支持。

            Executor接口執(zhí)行已提交的可以運行的事務。它提供了一條途徑,允許我們把事務提交從事務執(zhí)行機制中分離出來。程序員通常使用Executor代替顯式地(explicitly)建立線程。Executor接口也提供事務的同步和異步執(zhí)行。

            對于同步執(zhí)行,使用下面的命令:

          Class MySynExecutor implements Executor{
           public void execute(Runnable r) {
            r.run();
           } 
          }

            對于異步執(zhí)行,使用下面的命令:

          Class MyASynExecutor implements Executor{
           public void execute(Runnable r) {
            new Thread(r).start();
           }
          }

            ExecutorService(執(zhí)行器服務)類

            ExecutorService類為管理一個或多個異步事務的終止和跟蹤事務執(zhí)行的過程提供了方法。代碼下載中的MyExecutorService.java文件演示了管理事務終止的過程。它初始化了大小為三個的線程池,然后依次添加了線程。當線程的數(shù)量達到線程池的大小限制時,它調(diào)用關閉(shutdown)方法。在調(diào)用shutdown()方法之后,這個線程池不再接受新事務的執(zhí)行。在等待十秒以后,該線程池調(diào)用shutDownNow()。這個方法會盡最大的努力來終止所有運行中的事務。在示例中,應用程序試圖終止運行中的線程失敗了。

            ScheduledExecutorService(調(diào)度執(zhí)行器服務)

            ScheduledExecutorService類是我的最喜歡的類。它對于調(diào)度那些周期性執(zhí)行的事務非常方便,而周期性執(zhí)行的事務對于清除工作(例如清除你的應用程序建立的臨時文件等等)尤其有用。下載代碼中的MyScheduledExecutorService.java文件通過每五秒鐘發(fā)出"嘟嘟"一聲演示了調(diào)度的過程:

          final Runnable beeper = new Runnable() {
           public void run() { System.out.println("beep"); }
          };
          final ScheduledFuture beeperHandle =scheduler.scheduleAtFixedRate(beeper, 1, 5, SECONDS);
          posted on 2008-01-20 01:43 礦礦 閱讀(2386) 評論(3)  編輯  收藏

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 兴文县| 明溪县| 正安县| 怀宁县| 丹江口市| 常德市| 丰宁| 密山市| 囊谦县| 会泽县| 吐鲁番市| 呼玛县| 定陶县| 辽宁省| 滨海县| 龙海市| 富锦市| 潍坊市| 新巴尔虎左旗| 苗栗县| 四会市| 株洲县| 汽车| 滁州市| 乃东县| 南安市| 岳普湖县| 莱阳市| 阿拉善盟| 青海省| 纳雍县| 河间市| 三明市| 阳新县| 巧家县| 柯坪县| 万载县| 富宁县| 西乡县| 安新县| 乌拉特后旗|