一、概述
java.util.concurrent中有非常方便的线程池实现,提供的Executor框架包含用于管理实现Runnable任务,Executors类提供了许多不同类型的Executor实现的静态工厂方法。

二、实例
public class MyTask implements Runnable
{
public void run()
{
System.out.println(Thread.currentThread().getName() + "任务正在运行");
}
}

①固定大小线程池newFixedThreadPool
public class FixedThreadPoolTest
{
public static void main(String[] args)
{
// 创建固定大小为5的线程池
ExecutorService threadPool = Executors.newFixedThreadPool(5);
// 模拟执行了20个任务,而线程池中只有5个线程
for (int i = 0; i < 20; i++)
{
try
{
// 一次执行五个任务,其余任务排队
Thread.sleep(20);
threadPool.execute(new MyTask());
}
catch (Exception e)
{
e.printStackTrace();
}
}
threadPool.shutdown();
}
}
pool-1-thread-1任务正在运行
pool-1-thread-2任务正在运行
pool-1-thread-3任务正在运行
pool-1-thread-4任务正在运行
pool-1-thread-5任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-2任务正在运行
pool-1-thread-3任务正在运行
pool-1-thread-4任务正在运行
pool-1-thread-5任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-2任务正在运行
pool-1-thread-3任务正在运行
pool-1-thread-4任务正在运行
pool-1-thread-5任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-2任务正在运行
pool-1-thread-3任务正在运行
pool-1-thread-4任务正在运行
pool-1-thread-5任务正在运行

②不限制大小的线程池newCachedThreadPool
public class CachedThreadPool
{
public static void main(String[] args)
{
// 不限制线程池的大小
// 当以前创建的线程可以使用时会重新使用
ExecutorService threadPool = Executors.newCachedThreadPool();
for (int i = 0; i < 20; i++)
{
threadPool.execute(new MyTask());
}
threadPool.shutdown();
}
}
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-2任务正在运行
pool-1-thread-4任务正在运行
pool-1-thread-3任务正在运行
pool-1-thread-2任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-6任务正在运行
pool-1-thread-4任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-3任务正在运行
pool-1-thread-4任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-5任务正在运行
pool-1-thread-7任务正在运行
pool-1-thread-3任务正在运行
pool-1-thread-2任务正在运行
pool-1-thread-8任务正在运行
pool-1-thread-6任务正在运行

③单线程池newSingleThreadExecutor
public class SingleThreadPool
{
public static void main(String[] args)
{
// 单线程池
ExecutorService threadPool = Executors.newSingleThreadExecutor();
for (int i = 0; i < 20; i++)
{
threadPool.execute(new MyTask());
}
threadPool.shutdown();
}
}pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行

④定时任务线程池newScheduledThreadPool
public class ScheduledPool
{
public static void main(String[] args)
{
// 定时任务线程池
ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(3);
// 三秒后运行任务
threadPool.schedule(new MyTask(), 3, TimeUnit.SECONDS);
// 五秒钟后运行,每隔两秒钟执行一次
threadPool.scheduleAtFixedRate(new MyTask(), 5, 2, TimeUnit.SECONDS);
}
}

转载于:https://blog.51cto.com/woshixy/1421259

java.util.concurrent包(2)——线程池相关推荐

  1. java.util.concurrent 多线程框架---线程池编程(四)

    java.util.concurrent 结构 Sync:获得/释放(acquire/release) 协议.同步(定制锁.资源管理.其他同步) Channel:放置/取走(put/take) 协议. ...

  2. java.util.concurrent包API学习笔记

    newFixedThreadPool 创建一个固定大小的线程池. shutdown():用于关闭启动线程,如果不调用该语句,jvm不会关闭. awaitTermination():用于等待子线程结束, ...

  3. java.util.concurrent包详细分析--转

    原文地址:http://blog.csdn.net/windsunmoon/article/details/36903901 概述 Java.util.concurrent 包含许多线程安全.测试良好 ...

  4. java.util.concurrent 包下面的所有类

    java.util.concurrent 包下面的所有类 原子操作数类: java.util.concurrent.atomic.AtomicBoolean.class java.util.concu ...

  5. java.util.concurrent包

    本文是我们学院课程中名为Java Concurrency Essentials的一部分 . 在本课程中,您将深入探讨并发的魔力. 将向您介绍并发和并发代码的基础知识,并学习诸如原子性,同步和线程安全之 ...

  6. Java高并发编程学习(三)java.util.concurrent包

    简介 我们已经学习了形成Java并发程序设计基础的底层构建块,但对于实际编程来说,应该尽可能远离底层结构.使用由并发处理的专业人士实现的较高层次的结构要方便得多.要安全得多.例如,对于许多线程问题,可 ...

  7. 【ArrayList】为什么java.util.concurrent 包里没有并发的ArrayList实现?

    2019独角兽企业重金招聘Python工程师标准>>> 为什么java.util.concurrent 包里没有并发的ArrayList实现? 问:JDK 5在java.util.c ...

  8. 高并发编程基础(java.util.concurrent包常见类基础)

    JDK5中添加了新的java.util.concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法 ...

  9. Java笔记-concurrent集合及线程池

    reentrantLock + condition实现 Blocking queue. java.util.concurrent提供了线程安全的Blocking集合:ArrayBlockingQueu ...

最新文章

  1. 盘点互联网大厂AI战略变迁,开发者将怎样pick前进路线?
  2. php求二维矩阵的最大子矩阵,最大子矩阵-动态规划
  3. word精华样式篇之三使用样式集让所有文档风格统一
  4. WebRTC系列之音频的那些事
  5. java面试题32:Java网络程序设计中,下列正确的描述是()
  6. Ubuntu用户连续N次输入错误密码进行登陆时自动锁定X分钟
  7. [QA翻译]如何在Storm里拆分stream流?
  8. Spring父子上下文(WebApplicationContext)(防止事务失效)
  9. python运行需要网络吗_python邮件和网络的简单使用
  10. PHP 获取图片信息exif
  11. 研究生初学机器学习的几点建议
  12. 荣耀linux电脑开机后黑屏,开机黑屏进不了系统,教您解决电脑开机黑屏进不了系统...
  13. Android最新最全100余款开源App(对应Github开源项目)
  14. 转载:微软内部职位分类和待遇
  15. 记录每天背的单词,准备考研。(3月15日)
  16. Ceph分布式存储实践应用之Ceph性能调优
  17. C++练习题:某校教师的课酬计算方法是:教授100元/h,副教授80元/h,讲师60元/h,助教40元/h,编写计算教师课酬的程序
  18. 找不到JVM是什么原因
  19. 医学图像分类_体素科技:深钻小数据下的医学图像分割
  20. 查找Chrome浏览器header中的user-Agent两种方法

热门文章

  1. python读取大文件csv_对python中大文件的导入与导出方法详解
  2. html 文字中不换行怎么写,HTML让字体在一行内显示不换行
  3. 控制反转 php,[PHP学习] 控制反转以及依赖注入的日常使用
  4. php 实现两变量值对换,PHP互换两个变量值的方法(不用第三变量)
  5. java单个变量的表达式_java中使用Lambda表达式的5种语法
  6. html左侧隐藏菜单栏,如何制作一个炫酷的隐藏侧边栏菜单
  7. tomcat修改http长度限制_设置tomcat nginx上传文件大小限制
  8. python restful api_用Python语言写一个restful API
  9. oom机制分析及对应优化策略
  10. 2017长春java平均工资_2016年长春在岗职工社会平均工资出炉:66948元,月平均工资5579元...