Java線程池如何體現自己的用途
Java線程池就像數據庫連接池一樣,是一個對象池。我們在使用的時候需要不斷的學習,這樣才能不斷的適應相關語言技術的變化。所有的對象池都有一個共同的目的,那就是為了提高對象的使用率,從而達到提高程序效率的目的。
比如對于Servlet,它被設計為多線程的(如果它是單線程的,你就可以想象,當1000個人同時請求一個網頁時,在第一個人獲得請求結果之前,其它999個人都在郁悶地等待),如果為每個用戶的每一次請求都創建一個新的線程對象來運行的話,系統就會在創建線程和銷毀線程上耗費很大的開銷,大大降低系統的效率。因此,Servlet多線程機制背后有一個Java線程池在支持,線程池在初始化初期就創建了一定數量的線程對象,通過提高對這些對象的利用率,避免高頻率地創建對象,從而達到提高程序的效率的目的。
下面實現一個最簡單的Java線程池,從中理解它的實現原理。為此我們定義了四個類,它們的用途及具體實現如下:
Task(任務):這是個代表任務的抽象類,其中定義了一個deal()方法,繼承Task抽象類的子類需要實現這個方法,并把這個任務需要完成的具體工作在deal()方法編碼實現。Java線程池中的線程之所以被創建,就是為了執行各種各樣數量繁多的任務的,為了方便線程對任務的處理,我們需要用Task抽象類來保證任務的具體工作統一放在deal()方法里來完成,這樣也使代碼更加規范。
Task的定義如下:
Java代碼
1.public abstract class Task { 2.public enum State { 3./* 新建 */NEW, /* 執行中 */RUNNING, /* 已完成 */FINISHED 4.} 5.// 任務狀態 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, /* 執行中 */RUNNING, /* 已完成 */FINISHED 18.} 19.// 任務狀態 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.} |
以上就是對Java線程池的相關代碼介紹。