import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor;
import org.apache.commons.lang3.time.StopWatch;
import cn.hutool.http.HttpUtil;
/**
* MyThreadPool https://blog.csdn.net/qq_16116549/article/details/103784051
* HttpClientPool https://blog.csdn.net/qq_16116549/article/details/103785186
*/
public class HttpClientPoolClient {
public static void main(String[] args) {
HttpClientPool pool = HttpClientPool.getInstance();
List<Future<Integer>> futures = new ArrayList<Future<Integer>>();
MyThreadPool myPool = MyThreadPool.getInstance();
ThreadPoolExecutor executor = myPool.getSinglePool();
String url = "https://blog.csdn.net/qq_16116549/article/details/103784051";
StopWatch sw = new StopWatch();
sw.start();
// for (int i = 0; i < 10; i++) {
// String result = HttpUtil.get(url);
// System.out.println("Main线程执行完毕:" + result);
// }
for (int i = 0; i < 1000; i ++) {
Future<Integer> submit = executor.submit(() -> pool.doGetStatus(url));
futures.add(submit);
}
// for (int i = 0; i < 1000; i++) {
// Future<Integer> submit = executor.submit(() -> {
// String result = HttpUtil.get(url);
// if (result == null) {
// return 0;
// } else {
// return 1;
// }
// });
// futures.add(submit);
// }
//
for (Future<Integer> future : futures) {
try {
int result = future.get();
System.out.println("线程执行完毕:" + result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
sw.stop();
System.out.println("httppool status0: " + pool.getPoolStats() + " finish!" + sw.getTime());
}
}
最后一句日志,总会打在所有线程执行完毕!