newFixedThreadPool()方法:

该方法返回一个固定数量的线程池,当一个新的任务提交时,线程池中若有空闲线程,则立即执行。

若没有。则新的任务被暂存在一个任务队列中,待线程空闲时,便处理在任务队列中的任务

newCachedThreadPool()方法:

该方法返回一个可根据实际情况调整线程数量的线程池。若多余一个任务的线程数量不确定,但若有空闲线程可以复用

则会优先使用可复用的线程。若所有任务均在工作,又有新的任务提交,则会创建新的线程处理任务。所有线程在当前任务执行完毕后,将返回线程池复用。

下面看一个实例

package com.thread.test.ThreadPool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; public class ThreadPoolDemo { public static class MyTask implements Runnable { public void run() {
System.out.println(System.currentTimeMillis() + ":Thread ID:" + Thread.currentThread().getId());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} } public static void main(String[] args) {
MyTask myTask = new MyTask();
ExecutorService exec = Executors.newFixedThreadPool(5);// 创建有5个线程的线程池
// ExecutorService exec = Executors.newCachedThreadPool();// 创建一个可根据实际情况调整线程数量线程池
for (int i = 0; i < 10; i++) {
exec.submit(myTask);
}
} }

如果用newFixedThreadPool(),则输出如下结果:

1516775320357:Thread ID:10
1516775320357:Thread ID:13
1516775320357:Thread ID:12
1516775320357:Thread ID:11
1516775320357:Thread ID:14
1516775321357:Thread ID:14
1516775321357:Thread ID:11
1516775321357:Thread ID:13
1516775321357:Thread ID:12
1516775321357:Thread ID:10

这10个线程的执行情况如下:
前五个线程和后五个线程时间间隔为1s,并且前五个线程和后五个线程是完全一样的(看线程ID)

如果用newCachedThreadPool(),则输出结果如下:

1516775501829:Thread ID:11
1516775501830:Thread ID:13
1516775501829:Thread ID:10
1516775501830:Thread ID:14
1516775501829:Thread ID:12
1516775501830:Thread ID:16
1516775501830:Thread ID:15
1516775501830:Thread ID:18
1516775501830:Thread ID:17
1516775501830:Thread ID:19

线程池工厂方法newFixedThreadPool()和newCachedThreadPool()的更多相关文章

  1. 线程池工厂方法newScheduledThreadPool(),计划任务

    package com.thread.test.ThreadPool; import java.util.concurrent.Executors; import java.util.concurre ...

  2. 一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结

    一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结 这是一个十分严重的线上问题 自从最近的某年某月某天起,线上服务开始变得不那么稳定(软病).在高峰期,时常有几台机器的 ...

  3. 使用Java 线程池的利弊及JDK自带六种创建线程池的方法

    1. 为什么使用线程池 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务.请求以某种方式到达服务器,这种方式可能是通过网络协 ...

  4. 线程池工厂Executors编程的艺术

    Executors是一个线程池的工厂类,提供各种有用的线程池的创建,使用得当,将会使我们并发编程变得简单!今天就来聊聊这个工厂类的艺术吧! Executors只是Executor框架的主要成员组件之一 ...

  5. 【转】一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结

    [转]原文链接:https://cloud.tencent.com/developer/article/1497826 这是一个十分严重的线上问题 自从最近的某年某月某天起,线上服务开始变得不那么稳定 ...

  6. JUC之线程池-三大方法-七大参数-四种拒绝策略

    线程池:重点 三大方法 七大参数 四种拒绝策略 使用池化技术的理由: 我们的程序伴随着创建销毁线程十分浪费资源, 所以使用线程池,先创建线程,随用随取,用完归还 简单来说就是节约了资源. 使用线程池的 ...

  7. JUC 并发编程--08,线程池,三大方法,七大参数,4种拒绝策略,代码演示

    三大方法: //线程池核心线程数为n, 最大线程数为 n ExecutorService fixedThreadPool = Executors.newFixedThreadPool(n); 源码: ...

  8. java线程池之一:创建线程池的方法

    在Java开发过程中经常需要用到线程,为了减少资源的开销,提高系统性能,Java提供了线程池,即事先创建好线程,如果需要使用从池中取即可,Java中创建线程池有以下的方式, 1.使用ThreadPoo ...

  9. Java创建线程池的方法

    Executors创建四种线程池: CachedThreadPool:可缓存的线程池,该线程池中没有核心线程,非核心线程的数量为Integer.max_value,当有需要时创建线程来执行任务,没有需 ...

随机推荐

  1. Python操作Redis及连接方式

    前沿:随着互联网的高速发展,数据变得越来越重要,Python成为了人工智能的热门语言,而Nosql数据库已成为日常开发用品. 今天要写的是Python操作Redis Redis的安装我就不介绍了,你可 ...

  2. Redis哨兵

    Redis Sentinel Redis哨兵为Redis提供高可用.这就意味着你用哨兵可以创建一个Redis部署,在没有人为干预的情况下抵抗某些失败.(PS:自动故障转移) Redis哨兵还提供其他的 ...

  3. 并发编程(七)——AbstractQueuedSynchronizer 之 CountDownLatch、CyclicBarrier、Semaphore 源码分析

    这篇,我们的关注点是 AQS 最后的部分,共享模式的使用.本文先用 CountDownLatch 将共享模式说清楚,然后顺着把其他 AQS 相关的类 CyclicBarrier.Semaphore 的 ...

  4. 无法使用 xxxx附加到应用程序

    以管理员运行cmd,输入netsh   winsock   reset ,重启电脑,OK. 出现这个错误的原因一般是因为游戏的缘由,本人亲测.

  5. 文本主题模型之非负矩阵分解(NMF)

    在文本主题模型之潜在语义索引(LSI)中,我们讲到LSI主题模型使用了奇异值分解,面临着高维度计算量太大的问题.这里我们就介绍另一种基于矩阵分解的主题模型:非负矩阵分解(NMF),它同样使用了矩阵分解 ...

  6. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  7. Spring源码情操陶冶-tx:advice解析器

    承接Spring源码情操陶冶-自定义节点的解析.本节关于事务进行简单的解析 spring配置文件样例 简单的事务配置,对save/delete开头的方法加事务,get/find开头的设置为不加事务只读 ...

  8. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(3)- KBOOT配置(FOPT/BOOT Pin/BCA)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT配置. KBOOT是支持配置功能的,配置功能可分为两方面:一.芯片系统的启动配置:二.KBO ...

  9. RESTful杂记

    在网上找了许久的关于REST的资料,发现网上大部分都是说的比较片面,虽然有部分说出了本质,但也没有详细提出,所以在这里记录一下. RESTful是什么 首先,维基百科是这样说的: 表现层状态转换(RE ...

  10. linuix没有网络

    今天在虚拟机安装玩Centos7以后,update报了一个错 有两个方法可以解决 方法一. 1.打开 vi /etc/sysconfig/network-scripts/ifcfg-ens33(每个机 ...