rejected=newThreadPoolExecutor.DiscardOldestPolicy();//将最早进入队列的任务删,之后再尝试加入队列 rejected=newThreadPoolExecutor.CallerRunsPolicy();//如果添加到线程池失败,那么主线程会自己去执行该任务 //使用的线程池 ExecutorServicethreadPool=null; threadPool=Executors.newCachedThreadPool();//有缓冲的线程池...
maximumPoolSize:线程池最大线程数,这个参数也是一个非常重要的参数,它表示在线程池中最多能创建多少个线程; keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止。默认情况下,只有当线程池中的线程数大于corePoolSize时,keepAliveTime才会起作用,直到线程池中的线程数不大于corePoolSize,即当线程池中的线程...
三、使用 ThreadPoolExecutor 自定义线程池参数 创建1 11个线程池 , 核心线程数是2 22, 最大线程数是3 33, 则非核心线程 0 ~ 1 个 , 非核心线程最大空闲存活时间 60 秒 , 阻塞队列最大存放 10 个元素 , 拒绝策略设置为抛出异常方式 , 如果阻塞队列装满 , 再次尝试执行新任务时 , 会抛出异常 ; 代码...
功能:当触发拒绝策略时,只要线程池没有关闭,就由提交任务的当前线程处理。 使用场景:一般在不允许失败的、对性能要求不高、并发量较小的场景下使用,因为线程池一般情况下不会关闭,也就是提交的任务一定会被运行,但是由于是调用者线程自己执行的,当多次提交任务时,就会阻塞后续任务执行,性能和效率自然就慢了。 Abort...
5)、线程池中各个参数 corePoolSize 线程池中的核心线程数,当提交一个任务时,线程池创建一个新线程执行任务,直到当前线程数等于corePoolSize; 如果当前线程数为corePoolSize,继续提交的任务被保存到阻塞队列中,等待被执行; 如果执行了线程池的prestartAllCoreThreads()方法,线程池会提前创建并启动所有核心线程。
handler 是当工作队列和线程池都满了之后采取的饱和策略。 常见的饱和策略有 AbortPolicy(默认,抛出异常...
workQueue:阻塞队列,当核心线程数已满,任务会被放到这个队列中。 threadFactory:线程工厂,线程池中的线程都是由这个线程工厂创建的,线程池提供了默认的线程工厂。 handler:拒绝策略,当队列任务已满,且线程数量达到最大线程数,新进入的任务会执行这个拒绝策略来选择丢弃哪个任务,线程池提供了四种默认的拒绝策略。
handler:拒绝策略,表示当队列满了并且工作线程大于等于线程池的最大线程数(maximumPoolSize)时如何来拒绝来请求的Runnable的策略 为什么使用线程池 创建和销毁线程需要和底层操作系统交互,大量时间都耗费在创建和销毁线程上,因而比较浪费时间,系统效率很低而线程池里的每一个线程任务结束后,并不会死亡,而是再次回到线程池...
一个阻塞队列,用来存储等待执行的任务,这个参数的选择也很重要,会对线程池的运行过程产生重大影响,一般来说,这里的阻塞队列有以下几种选择: 代码语言:javascript 复制 ArrayBlockingQueue;LinkedBlockingQueue;SynchronousQueue; ArrayBlockingQueue和PriorityBlockingQueue使用较少,一般使用LinkedBlockingQueue和Synchronous。线程池...
1.线程池的定义 线程池是一种多线程任务处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。这里引用wiki上面的一个图如下: 2.线程池使用的场景 (a)单个任务处理时间相对短 (b)需要处理的任务数量很大 3.线程池的主要作用 (a)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的...