多线程处理耗时操作的demo。耗时操作包括DB查询和请求接口。
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.FutureTask;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import com.google.common.collect.Lists;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
public class FutureTest {
public static void main(String[] args) throws Exception{
long time = System.currentTimeMillis();
List<FutureTask<String>> futureTaskList = Lists.newArrayList();
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("metrix-pool-%d").build();
//通用线程池
ExecutorService threadPool = new ThreadPoolExecutor(10, 20,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
for (int i = 0; i < 100; i++) {
FutureTask<String> futureTask = new FutureTask(new Callable() {
@Override
public Object call() throws Exception {
return runTest();
}
});
threadPool.execute(futureTask);
futureTaskList.add(futureTask);
}
futureTaskList.forEach(s->{
try {
System.out.println(s.get(10,TimeUnit.SECONDS));
}catch (Exception e) {
}
});
System.out.println(System.currentTimeMillis() - time);
}
private static String runTest() throws Exception {
Thread.sleep(50);
return "ok";
}
}