カスタムスレッドプールの開発


各スレッドの起動と終了は、時間とリソースの消費を比較します. 
システムに多くのスレッドが使用されている場合、大量の起動と終了動作はシステムのパフォーマンスをカード化し、応答が遅くなります. 
この問題を解決するために,スレッドプールという設計思想を導入した. 
スレッドプールのモデルは生産者消費者モデルに似ており,消費の対象は1つ1つの実行可能なタスクである.
設計構想:
1.タスクコンテナの準備
2.オンラインプロセスプール類の初期化時、10個の消費者スレッドを一度に起動する
3.タスクコンテナが空なので、すべてのスレッドが
wait状態
.
4.外部スレッドがタスクコンテナに追加されると、消費者スレッドがnotify 5を起動する.この消費者スレッドはコンテナ内の外部スレッドを取得し、このタスクを実行し、実行が完了した後、次の外部スレッドの到来を待つ.6.短時間で多くの外部スレッドが追加されると、複数のスレッドが起動され、これらの外部スレッドが実行されます.
プロセス全体で、新しいスレッドを作成する必要はありません.既存のスレッドを繰り返し使用します.
スレッドプールクラス:
import java.util.LinkedList;

public class ThreadPool {

	//     
	int threadPoolSize;
	//  
	LinkedList tasks = new LinkedList();
	
	public ThreadPool() {
		threadPoolSize = 10;
		
		//  10   
		synchronized (tasks) {
			for(int i=0;i

テストクラス:
public class TestThread {

	public static void main(String[] args){
		
		ThreadPool threadPool = new ThreadPool();
		
		for(int i=0;i<25;i++){
			final int j = i;
			//     
			Runnable task = new Runnable() {
				@Override
				public void run() {
					System.out.println("working in "+j);
					
					try {
						Thread.sleep(10000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					
					System.out.println("work accompletion in "+j);
				}
			};
			threadPool.add(task);
			
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

テスト結果:
  :         2
  :         0
  :         1
  :         4
  :         5
  :         6
  :         3
  :         9
  :         8
  :         7
        7      ,   
working in 0
        5      ,   
working in 1
        8      ,   
working in 2
        4      ,   
working in 3
        9      ,   
working in 4
        6      ,   
working in 5
        1      ,   
working in 6
        2      ,   
working in 7
        0      ,   
working in 8
        3      ,   
working in 9
work accompletion in 0
        7      ,   
working in 10
work accompletion in 1
        5      ,   
working in 11
work accompletion in 2
        8      ,   
working in 12
work accompletion in 3
        4      ,   
working in 13
work accompletion in 4
        9      ,   
working in 14
work accompletion in 5
        6      ,   
working in 15
work accompletion in 6
        1      ,   
working in 16
work accompletion in 7
        2      ,   
working in 17
work accompletion in 8
        0      ,   
working in 18
work accompletion in 9
        3      ,   
working in 19
work accompletion in 10
        7      ,   
working in 20
work accompletion in 11
        5      ,   
working in 21
work accompletion in 12
        8      ,   
working in 22
work accompletion in 13
        4      ,   
working in 23
work accompletion in 14
        9      ,   
working in 24
work accompletion in 15
work accompletion in 16
work accompletion in 17
work accompletion in 18
work accompletion in 19
work accompletion in 20
work accompletion in 21
work accompletion in 22
work accompletion in 23
work accompletion in 24