java 复制代码public void execute(Runnable command) { //如果传递的任务为空则抛出空指针异常 if (command == null) throw new NullPointerException(); int c = ctl.get(); //如果工作线程数小于核心线程数, if (workerCountOf(c) < corePoolSize) { //执行addWork,提交为核心线程,提交成功return。提交...
1. OOM:如果当前方法突遇高并发情况,假设此时来了1000个请求,而按传统的网络模型是BIO,此时服务器会开1000个线程来处理这1000个请求(不考虑WEB容器的最大线程数配置),当1000个请求执行时又会发现此方法中存在new Thread();创建线程,此时每个执行请求的线程又会创建一个线程,此时就会出现1000*2=2000个线程的情况...
在上面的案例中我们使用到了execute()、schedule()、submit()、invokeAll()等方法向线程池中递交任务,但是当我们跟进源码分析会发现,线程池递交任务的核心就是Executor接口定义的核心方法execute(Runnabel command),所以我们如果要分析线程池原理的重点就在此方法。 三、深入源码剖析线程池工作原理 在上一节我们从宏观上...