qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          Java線程池如何體現(xiàn)自己的用途

            Java線程池就像數(shù)據(jù)庫(kù)連接池一樣,是一個(gè)對(duì)象池。我們?cè)谑褂玫臅r(shí)候需要不斷的學(xué)習(xí),這樣才能不斷的適應(yīng)相關(guān)語(yǔ)言技術(shù)的變化。所有的對(duì)象池都有一個(gè)共同的目的,那就是為了提高對(duì)象的使用率,從而達(dá)到提高程序效率的目的。

            比如對(duì)于Servlet,它被設(shè)計(jì)為多線程的(如果它是單線程的,你就可以想象,當(dāng)1000個(gè)人同時(shí)請(qǐng)求一個(gè)網(wǎng)頁(yè)時(shí),在第一個(gè)人獲得請(qǐng)求結(jié)果之前,其它999個(gè)人都在郁悶地等待),如果為每個(gè)用戶(hù)的每一次請(qǐng)求都創(chuàng)建一個(gè)新的線程對(duì)象來(lái)運(yùn)行的話(huà),系統(tǒng)就會(huì)在創(chuàng)建線程和銷(xiāo)毀線程上耗費(fèi)很大的開(kāi)銷(xiāo),大大降低系統(tǒng)的效率。因此,Servlet多線程機(jī)制背后有一個(gè)Java線程池在支持,線程池在初始化初期就創(chuàng)建了一定數(shù)量的線程對(duì)象,通過(guò)提高對(duì)這些對(duì)象的利用率,避免高頻率地創(chuàng)建對(duì)象,從而達(dá)到提高程序的效率的目的。

            下面實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的Java線程池,從中理解它的實(shí)現(xiàn)原理。為此我們定義了四個(gè)類(lèi),它們的用途及具體實(shí)現(xiàn)如下:

            Task(任務(wù)):這是個(gè)代表任務(wù)的抽象類(lèi),其中定義了一個(gè)deal()方法,繼承Task抽象類(lèi)的子類(lèi)需要實(shí)現(xiàn)這個(gè)方法,并把這個(gè)任務(wù)需要完成的具體工作在deal()方法編碼實(shí)現(xiàn)。Java線程池中的線程之所以被創(chuàng)建,就是為了執(zhí)行各種各樣數(shù)量繁多的任務(wù)的,為了方便線程對(duì)任務(wù)的處理,我們需要用Task抽象類(lèi)來(lái)保證任務(wù)的具體工作統(tǒng)一放在deal()方法里來(lái)完成,這樣也使代碼更加規(guī)范。

            Task的定義如下:

            Java代碼

          1.public abstract class Task {
          2.public enum State {
          3./* 新建 */NEW, /* 執(zhí)行中 */RUNNING, /* 已完成 */FINISHED
          4.}
          5.// 任務(wù)狀態(tài)
          6.private State state = State.NEW;
          7.public void setState(State state) {
          8.this.state = state;
          9.}
          10.public State getState() {
          11.return state;
          12.}
          13.public abstract void deal();
          14.}
          15.public abstract class Task {
          16.public enum State {
          17./* 新建 */NEW, /* 執(zhí)行中 */RUNNING, /* 已完成 */FINISHED
          18.}
          19.// 任務(wù)狀態(tài)
          20.private State state = State.NEW;
          21.public void setState(State state) {
          22.this.state = state;
          23.}
          24.public State getState() {
          25.return state;
          26.}
          27.public abstract void deal();
          28.}

            以上就是對(duì)Java線程池的相關(guān)代碼介紹。

          posted on 2012-02-08 16:50 順其自然EVO 閱讀(142) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2012年2月>
          2930311234
          567891011
          12131415161718
          19202122232425
          26272829123
          45678910

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 瓮安县| 盐山县| 浏阳市| 扶沟县| 霸州市| 杂多县| 青州市| 湘西| 临泉县| 万宁市| 原阳县| 信宜市| 泽库县| 广昌县| 黄山市| 菏泽市| 合肥市| 博罗县| 宁化县| 丰县| 修文县| 江安县| 夏邑县| 松江区| 同仁县| 朝阳市| 龙里县| 石柱| 临邑县| 共和县| 甘孜县| 富川| 海盐县| 巫溪县| 甘谷县| 卓资县| 庆云县| 天等县| 探索| 光泽县| 聂拉木县|