來(lái)源:北大青鳥(niǎo)飛迅校區(qū)|發(fā)布時(shí)間:2013-04-23 16:04:48
Java線程池就像數(shù)據(jù)庫(kù)連接池一樣,是一個(gè)對(duì)象池。我們?cè)谑褂玫臅r(shí)候需要不斷的學(xué)習(xí),因?yàn)樗械膶?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è)用戶的每一次請(qǐng)求都創(chuàng)建一個(gè)新的線程對(duì)象來(lái)運(yùn)行的話,系統(tǒng)就會(huì)在創(chuàng)建線程和銷毀線程上耗費(fèi)很大的開(kāi)銷,大大降低系統(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è)類,它們的用途及具體實(shí)現(xiàn)如下:
Task(任務(wù)):這是個(gè)代表任務(wù)的抽象類,其中定義了一個(gè)deal()方法,繼承Task抽象類的子類需要實(shí)現(xiàn)這個(gè)方法,并把這個(gè)任務(wù)需要完成的具體工作在deal()方法編碼實(shí)現(xiàn)。Java線程池中的線程之所以被創(chuàng)建,就是為了執(zhí)行各種各樣數(shù)量繁多的任務(wù)的,為了方便線程對(duì)任務(wù)的處理,我們需要用Task抽象類來(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)代碼介紹。
全程面授,不高薪都難
申請(qǐng)成功后,我們將在24小時(shí)內(nèi)與您聯(lián)系
招生熱線: 4008-0731-86 / 0731-82186801
學(xué)校地址: 長(zhǎng)沙市天心區(qū)團(tuán)結(jié)路6號(hào)
Copyright © 2006 | 湖南大計(jì)信息科技有限公司 版權(quán)所有
湘ICP備14017520號(hào)-3