Java通过Executors提供四种线程池,分别为:

newCachedThreadPool

可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

newFixedThreadPoo

l创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

newScheduledThreadPool

创建一个定长线程池,支持定时及周期性任务执行。

newSingleThreadExecutor

单线程化的线程池,用唯一的工作线程来执行,任务按照指定顺序(FIFO, LIFO, 优先级)执行。

1.newCachedThreadPool

package org.hornet.threadPool;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/** 线程池的实现(java.util.concurrent.Executor接口)* Java通过Executors提供四种线程池,分别为:* newCachedThreadPool     创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。* newFixedThreadPool      创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。* newScheduledThreadPool  创建一个定长线程池,支持定时及周期性任务执行。* newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。*/
public class ThreadPoolDemo1 {static void threadDoSth(){System.out.println(Thread.currentThread().getName()+" 正在运行...");}public static void main(String[] args) throws Exception {/** 1.newCachedThreadPool* 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。* 线程池为无限大,当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。*/ExecutorService cachedThreadPool = Executors.newCachedThreadPool();//执行10次逻辑for(int i = 0 ;i < 10 ; i++) {cachedThreadPool.execute(new Runnable() {public void run() {threadDoSth();}});}//运行完毕,需要销毁线程池cachedThreadPool.shutdown(); System.out.println("线程池已销毁");}}

2.newFixedThreadPool

package org.hornet.threadPool;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/** 线程池的实现(java.util.concurrent.Executor接口)* Java通过Executors提供四种线程池,分别为:* newCachedThreadPool     创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。* newFixedThreadPool      创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。* newScheduledThreadPool  创建一个定长线程池,支持定时及周期性任务执行。* newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。*/
public class ThreadPoolDemo2 {static void threadDoSth(){System.out.println(Thread.currentThread().getName()+" 正在运行...");}public static void main(String[] args) throws Exception {/** 2.newFixedThreadPool* 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。* 定长线程池的大小最好根据系统资源进行设置。如Runtime.getRuntime().availableProcessors()。*/ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);//执行10次逻辑for(int i = 0 ;i < 10 ; i++) {fixedThreadPool.execute(new Runnable() {public void run() {threadDoSth();}});}//运行完毕,需要销毁线程池fixedThreadPool.shutdown(); System.out.println("线程池已销毁");}}

3.newScheduledThreadPool

package org.hornet.threadPool;import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;/** 线程池的实现(java.util.concurrent.Executor接口)* Java通过Executors提供四种线程池,分别为:* newCachedThreadPool     创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。* newFixedThreadPool      创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。* newScheduledThreadPool  创建一个定长线程池,支持定时及周期性任务执行。* newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。*/
public class ThreadPoolDemo3 {static void threadDoSth(){System.out.println(Thread.currentThread().getName()+" 正在运行...");}static void threadDoSthMore(){System.out.println(Thread.currentThread().getName()+" new正在运行...");}public static void main(String[] args) throws Exception {/** 3.newScheduledThreadPool* 创建一个定长线程池,支持定时及周期性任务执行。* ScheduledExecutorService比Timer更安全,功能更强大。*/ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);//表示延迟3秒执行
//      scheduledThreadPool.schedule(new Runnable() {
//          public void run() {
//              threadDoSth();
//          }
//      }, 3, TimeUnit.SECONDS);//表示延迟1秒后每3秒执行一次scheduledThreadPool.scheduleAtFixedRate(new Runnable() {public void run() {threadDoSthMore();}}, 1, 3, TimeUnit.SECONDS);//运行完毕,需要销毁线程池
//      scheduledThreadPool.shutdown();
//      System.out.println("线程池已销毁");}}

4.newSingleThreadExecutor

package org.hornet.threadPool;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/** 线程池的实现(java.util.concurrent.Executor接口)* Java通过Executors提供四种线程池,分别为:* newCachedThreadPool     创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。* newFixedThreadPool      创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。* newScheduledThreadPool  创建一个定长线程池,支持定时及周期性任务执行。* newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。*/
public class ThreadPoolDemo4 {static void threadDoSth(){System.out.println(Thread.currentThread().getName()+" 正在运行...");}public static void main(String[] args) throws Exception {/** 4.newSingleThreadExecutor* 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。*/ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();//执行10次逻辑for(int i = 0 ;i < 10 ; i++) {singleThreadExecutor.execute(new Runnable() {public void run() {threadDoSth();}});}//运行完毕,需要销毁线程池singleThreadExecutor.shutdown(); System.out.println("线程池已销毁");}}

java线程池4种使用方式相关推荐

  1. java线程池的正确使用方式,completableFuture

    下面是最常见的线程池的使用和声明方式: public class ThreadTest {ExecutorService fixedThreadPool = Executors.newFixedThr ...

  2. 线程池三种创建方式和自定义线程池ThreadPoolExecutor

    线程池的优势: 线程池做的工作只要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任 ...

  3. Java 线程池 8 种拒绝策略

    前言 谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的这个api,大大的简化了多线程代码的开发.而不论你用Fix ...

  4. Java线程的两种实现方式

    前言 线程是程序的一条执行线索,执行路径,是程序使用cpu的最小单位.线程本身不能运行,它只能运行在程序中,线程是依赖于程序存在的. 多线程的意义 其实任何一个程序的执行都需要获得cpu的执行权,是由 ...

  5. java线程池和线程实例化_浅谈Java 线程池原理及使用方式

    一.简介 什么是线程池? 池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用.java中有线程池.连接池等等.线程池就是在系统启动或者实例化池时创建一些空闲的线程,等 ...

  6. java线程池的应用_Java线程池的使用

    Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...

  7. java方法生命周期_Java线程的第二种实现方式以及生命周期

    上篇中我们了解了Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步, ...

  8. Java线程池的四种创建方式

    Java线程池的四种创建方式 Java使用Thread类来表示线程,所有的线程都是Thread类或者是他的子类.Java有四种方式来创建线程. (1)继承Thread类创建线程 (2)实现Runnab ...

  9. 四种Java线程池用法解析

    四种Java线程池用法解析 本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 ...

最新文章

  1. 导出Excel表格时,如何把数据库表中的编号转换成配置文件中的汉字
  2. python微信聊天机器人源码_8.【代码】微信聊天机器人(API的应用) - Python网络爬虫实战...
  3. java堆是gc管理_JVM内存管理及GC机制
  4. 【原创】大叔经验分享(26)hive通过外部表读写elasticsearch数据
  5. 【SAP】各模块常用的Tcode
  6. SXWIN7X64EN_20181104_NET_msu_LITE英文精简版
  7. 34个省级行政区域,包括23个省,5个自治区,4个直辖市,2个特别行政区。
  8. 个人信息安全规范----8、组织的个人信息安全管理要求
  9. 为什么华为a1路由器网速变慢_华为a1路由器wifi经常掉线怎么办
  10. GW INSTEK GPD 3303系列稳压源控制软件(自行使用c#编写)更新
  11. 决不放弃--实现人生的目标
  12. 一文了解线控制动市场格局——7家公司10款产品盘点
  13. 美颜API是什么意思?美颜API和美颜SDK有什么区别?
  14. 注意了!朋友圈发一张照片,是如何泄露你的地址信息的?
  15. 分享一些Linux下监控软件
  16. 二〇二三-三-二十七
  17. 简单平台用户信息管理系统
  18. JavaScript前端开发第一次课内实训
  19. 博图14软件安装顺序_博图软件安装顺序 为什么博途用的人不多
  20. 开源教程 | 树莓派 DIY 波士顿动力机器狗,立省 53 万 RMB

热门文章

  1. BGCC源代码(一)
  2. 在早期IBP病人中比较风湿病医生诊断中轴型SpA(aSpA)与非aSpA
  3. 实验三_CISCO基本配置(笔记)
  4. Java如何解析html里面的内容并存到数据库
  5. [罗永浩与坚果:一支强弩的妥协]
  6. yml 文件连接sql数据库配置
  7. citespace连接Mysql_CiteSpace在CNKI中的应用
  8. 数据结构4——浅谈DancingLinks的思想及应用
  9. 普通电笔能测几伏电压_电笔最低可以测电压是多少伏?直流十二伏电笔也可以亮吗?...
  10. 设计模式-代理模式【Proxy Pattern】