江苏建安建设有限公司网站,做网站要ftp信息吗,长沙装修公司电话号码大全,西安市建网站新任务来的时候#xff0c;会先判断当前运行的线程数量是否达到核心线程数#xff0c;如果达到的话#xff0c;新任务就会被存放在队列中。 不同的线程池会选用不同的阻塞队列#xff0c;我们可以结合内置线程池来分析。 ● 容量为 Integer.MAX_VALUE 的 LinkedBlockingQue…新任务来的时候会先判断当前运行的线程数量是否达到核心线程数如果达到的话新任务就会被存放在队列中。 不同的线程池会选用不同的阻塞队列我们可以结合内置线程池来分析。 ● 容量为 Integer.MAX_VALUE 的 LinkedBlockingQueue (无界队列)FixedThreadPool和 SingleThreadExector。FixedThreadPool 最多只能创建核心线程数的线程核心线程数和最大线程数相等SingleThreadExector 只能创建一个线程核心线程数和最大线程数都是 1二者的任务队列永远不会被放满。 ● SynchronousQueue(同步队列)CachedThreadPool。SynchronousQueue 没有容量不存储元素目的是保证对于提交的任务如果有空闲线程则使用空闲线程来处理否则新建一个线程来处理任务。也就是说CachedThreadPool 的最大线程数是Integer.MAX_VALUE可以理解为线程数是可以无限扩展的可能会创建大量线程从而导致 OOM。 ● DelayedWorkQueue(延迟阻塞队列)ScheduledThreadPool 和SingleThreadScheduledExecutor。DelayedWorkQueue 的内部元素并不是按照放入的时间排序而是会按照延迟的时间长短对任务进行排序内部采用的是“堆”的数据结构可以保证每次出队的任务都是当前队列中执行时间最靠前的。DelayedWorkQueue添加元素满了之后会自动扩容原来容量的 1/2即永远不会阻塞最大扩容可达Integer.MAX_VALUE所以最多只能创建核心线程数的线程。