ThreadPoolExecutorスレッドプールの使用例
4231 ワード
主メソッドクラスRunのテスト:
スレッドプールには、3つのスレッドが定義され、100の共有リソース(list)が処理されます.
タスククラスThreadPoolTask:
実行結果:
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個のリソースを処理する.
スレッドプールには、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個のリソースを処理する.