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