java 멀티스레드 Executor
6705 단어 다중 스레드
package com.yxkong.demo.executor;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
public class ExecutorThread {
/**
*
*/
private ExecutorService exec;
/**
* cpu
*/
private int cpuNum;
/**
*
*/
private List> tasks = new ArrayList>();
public ExecutorThread(ExecutorService exec, int cupNum) {
this.cpuNum = cupNum;
this.exec = exec;
}
/**
*
* @author ducongcong
* @date 2017 5 21
*/
class SumExecutor implements Callable {
//
private List list;
public SumExecutor(List list) {
this.list = list;
}
public Integer call() throws Exception {
String threadName = Thread.currentThread().getName();
Integer maxId = 0;
// ,list ,
for(Integer i:list){
if(maxId" maxId="+maxId);
return maxId;
}
}
/**
* cpu
*/
public Integer exeData(List dataTasks) {
// CPU , FutureTask Executor
SumExecutor subCalc = null;
FutureTask task = null;
int size = dataTasks.size();
for (int i = 0; i < cpuNum; i++) {
int increment = size/ cpuNum + 1;
int start = increment * i;
int end = increment * i + increment;
if (end > size)
end = size;
// ,
subCalc = new SumExecutor(dataTasks.subList(start, end));
task = new FutureTask(subCalc);
tasks.add(task);
exec.submit(task);
}
subCalc = null;
task = null;
return getMaxId();
}
/**
*
*/
public Integer getMaxId() {
Integer result = 0;
for (Future task : tasks) {
try {
if (result < task.get()) {
result = task.get();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
private static List genList(int size) {
List list = new ArrayList();
for (int i = 0; i <= size; i++) {
list.add(new Random().nextInt());
}
return list;
}
public static void main(String[] args) {
// executorService
int cpuNum = 4;
ExecutorService executorService = Executors.newFixedThreadPool(cpuNum);
List arrays = genList(100);
System.err.println(arrays.toString());
ExecutorThread executorThread = new ExecutorThread(executorService, 4);
executorThread.exeData(arrays);
System.err.println("max:"+ executorThread.getMaxId());
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 다중 스레드를 순차적으로 실행하는 몇 가지 방법 요약Java 다중 스레드를 순차적으로 실행하는 몇 가지 방법 요약 동료는 무심결에 이 문제를 제기하고 두 가지 방법을 직접 실천했다.물론 더 좋은 방법이 있을 거야. 방법 1 이런 방법은 비교적 흔히 볼 수 있는 해결 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.