ThreadPoolExecutorスレッドプールの使用例

4231 ワード

主メソッドクラスRunのテスト:
スレッドプールには、3つのスレッドが定義され、100の共有リソース(list)が処理されます.
package t3;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class Run {

	public static void main(String[] args) {

		try {
			ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3,
					3, 4, TimeUnit.SECONDS,
					new ArrayBlockingQueue(3),
					new ThreadPoolExecutor.DiscardPolicy());

			List list = initList();

			int fromIndex = 0;
			for (int totalSize = list.size(); fromIndex <= totalSize;) {
				int toIndex = fromIndex + 30;
				toIndex = toIndex > totalSize ? totalSize : toIndex;
				List subList = list.subList(fromIndex, toIndex);
				TaskThread task = new TaskThread();
				task.setTaskList(subList);
				threadPoolExecutor.execute(task);
				fromIndex = toIndex;
				Thread.sleep(100);
			}
			
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	/**
	 *  100 
	 * @return
	 */
	private static List initList() {
		List list = new ArrayList();
		for (int i = 0; i < 100; i++) {
			list.add(" " + i);
		}
		return list;
	}

}

タスククラスThreadPoolTask:
package t3;

import java.util.List;

public class TaskThread implements Runnable {

	private List taskList;
	
	@Override
	public void run(){
		for(String str : getTaskList()){
			System.out.println(Thread.currentThread().getName() + str);
		}
	}
	
	public void setTaskList(List taskList){
		this.taskList = taskList;
	}
	
	public List getTaskList(){
		return taskList;
	}
	
}

実行結果:
pool-1-thread-1処理リソース0 pool-1-thread-1処理リソース1 pool-1-thread-1処理リソース2 pool-1-thread-1処理リソース3 pool-1-thread-1処理リソース4 pool-1-thread-1処理リソース5 pool-1-thread-1処理リソース6 pool-1-thread-1処理リソース7 pool-1-thread-1処理リソース8 pool-1-thread-1処理リソース9 pool-1-thread-1処理リソース10 pool-1-thread-1処理リソース11 pool-1-thread-1処理リソース12 pool-1 thread-1理資源13 pool-1-thread-1処理資源14 pool-1-thread-1処理資源15 pool-1-thread-1処理資源16 pool-1-thread-1処理資源17 pool-1-thread-1処理資源18 pool-1-thread-1処理資源19 pool-1-thread-1処理資源20 pool-1-thread-1処理資源21 pool-1-thread-1処理資源22 pool-1-thread-1処理資源23 pool-1-thread-1処理資源24 pool-1-thread-1処理資源25 pool-1-thread-1処理資源26 pool-1-thread-1処理資源27 pool-1-thread-1処理資源28 pool-1-thread-1処理資源29 pool-1-thread-2処理資源30 pool-1-thread-2処理資源31 pool-1-thread-2処理資源32 pool-1-thread-2処理資源33 pool-1-thread-2処理資源34 pool-1-thread-2処理資源35 pool-1-thread-2処理資源36 pool-1-thread-2処理資源37 pool-1-thread-2処理資源38 pool-1-thread-2処理資源39 pool-1-thread-2処理リソース40 pool-1-thread-2処理リソース41 pool-1-thread-2処理リソース42 pool-1-thread-2処理リソース43 pool-1-thread-2処理リソース44 pool-1-thread-2処理リソース45 pool-1-thread-2処理リソース46 pool-1-thread-2処理リソース47 pool-1-thread-2処理リソース48 pool-1-thread-2処理リソース49 pool-1-thread-2処理リソース50 pool-1-thread-2処理リソース51 pool-1-thread-2処理リソース52 pool-1-thread-2処理リソース53 pool-1-thread-2処理リソース54 pool-1-thread-2処理リソース55 pool-1-thread-2処理リソース56 pool-1-thread-2処理リソース57 pool-1-thread-2処理リソース58 pool-1-thread-2処理リソース59 pool-1-thread-3処理リソース60 pool-1-thread-3処理リソース61 pool-1-thread-3処理リソース62 pool-1-thread-3処理リソース63 pool-1-thread-3処理リソース64 pool-1-thread-3処理リソース65 pool-1-thread-3処理リソースソース66 pool-1-thread-3処理リソース67 pool-1-thread-3処理リソース68 pool-1-thread-3処理リソース69 pool-1-thread-3処理リソース70 pool-1-thread-3処理リソース71 pool-1-thread-3処理リソース72 pool-1-thread-3処理リソース73 pool-1-thread-3処理リソース74 pool-1-thread-3処理リソース75 pool-1-thread-3処理リソース76 pool-1-thread-3処理リソース77 pool-1-thread-3処理リソース78 pool-1-thread-3処理リソース79 pool-1-thread-3処理リソース80 pool-1-thread-3処理リソース81 pool-1-thread-3処理リソース82 pool-1-thread-3処理リソース83 pool-1-thread-3処理リソース84 pool-1-thread-3処理リソース85 pool-1-thread-3処理リソース86 pool-1-thread-3処理リソース87 pool-1-thread-3処理リソース88 pool-1-thread-3処理リソース89 pool-1-thread-1処理リソース90 pool-1-thread-1処理リソース91 pool-1-thread-1処理リソース92 pool-thread-1処理リソース93 pool-1-thread-1処理リソース94 pool-1-thread-1処理リソース95 pool-1-thread-1処理リソース96 pool-1-thread-1処理リソース97 pool-1-thread-1処理リソース98 pool-1-thread-1処理リソース99
可視スレッドプール内の3つのスレッドは,各スレッドに30個のリソースを割り当てて処理し,反発して100個のリソースを処理する.