java线程池4种使用方式
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种使用方式相关推荐
- java线程池的正确使用方式,completableFuture
下面是最常见的线程池的使用和声明方式: public class ThreadTest {ExecutorService fixedThreadPool = Executors.newFixedThr ...
- 线程池三种创建方式和自定义线程池ThreadPoolExecutor
线程池的优势: 线程池做的工作只要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任 ...
- Java 线程池 8 种拒绝策略
前言 谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的这个api,大大的简化了多线程代码的开发.而不论你用Fix ...
- Java线程的两种实现方式
前言 线程是程序的一条执行线索,执行路径,是程序使用cpu的最小单位.线程本身不能运行,它只能运行在程序中,线程是依赖于程序存在的. 多线程的意义 其实任何一个程序的执行都需要获得cpu的执行权,是由 ...
- java线程池和线程实例化_浅谈Java 线程池原理及使用方式
一.简介 什么是线程池? 池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用.java中有线程池.连接池等等.线程池就是在系统启动或者实例化池时创建一些空闲的线程,等 ...
- java线程池的应用_Java线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- java方法生命周期_Java线程的第二种实现方式以及生命周期
上篇中我们了解了Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步, ...
- Java线程池的四种创建方式
Java线程池的四种创建方式 Java使用Thread类来表示线程,所有的线程都是Thread类或者是他的子类.Java有四种方式来创建线程. (1)继承Thread类创建线程 (2)实现Runnab ...
- 四种Java线程池用法解析
四种Java线程池用法解析 本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 ...
最新文章
- 导出Excel表格时,如何把数据库表中的编号转换成配置文件中的汉字
- python微信聊天机器人源码_8.【代码】微信聊天机器人(API的应用) - Python网络爬虫实战...
- java堆是gc管理_JVM内存管理及GC机制
- 【原创】大叔经验分享(26)hive通过外部表读写elasticsearch数据
- 【SAP】各模块常用的Tcode
- SXWIN7X64EN_20181104_NET_msu_LITE英文精简版
- 34个省级行政区域,包括23个省,5个自治区,4个直辖市,2个特别行政区。
- 个人信息安全规范----8、组织的个人信息安全管理要求
- 为什么华为a1路由器网速变慢_华为a1路由器wifi经常掉线怎么办
- GW INSTEK GPD 3303系列稳压源控制软件(自行使用c#编写)更新
- 决不放弃--实现人生的目标
- 一文了解线控制动市场格局——7家公司10款产品盘点
- 美颜API是什么意思?美颜API和美颜SDK有什么区别?
- 注意了!朋友圈发一张照片,是如何泄露你的地址信息的?
- 分享一些Linux下监控软件
- 二〇二三-三-二十七
- 简单平台用户信息管理系统
- JavaScript前端开发第一次课内实训
- 博图14软件安装顺序_博图软件安装顺序 为什么博途用的人不多
- 开源教程 | 树莓派 DIY 波士顿动力机器狗,立省 53 万 RMB
热门文章
- BGCC源代码(一)
- 在早期IBP病人中比较风湿病医生诊断中轴型SpA(aSpA)与非aSpA
- 实验三_CISCO基本配置(笔记)
- Java如何解析html里面的内容并存到数据库
- [罗永浩与坚果:一支强弩的妥协]
- yml 文件连接sql数据库配置
- citespace连接Mysql_CiteSpace在CNKI中的应用
- 数据结构4——浅谈DancingLinks的思想及应用
- 普通电笔能测几伏电压_电笔最低可以测电压是多少伏?直流十二伏电笔也可以亮吗?...
- 设计模式-代理模式【Proxy Pattern】