java进阶之多线程二线程池
单线程线程池
class threadPool{public static void main(String[] args) {long f = System.currentTimeMillis();//-------------------------------------------//创建线程池只有一个线程ExecutorService es = Executors.newSingleThreadExecutor();es.execute(new myR());es.execute(new myR());es.execute(new myR());es.execute(new myR());es.shutdown();//-------------------------------------------long h = System.currentTimeMillis();System.out.println(h-f);}
}
class myR implements Runnable{@Overridepublic void run() {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"执行了");}
}
执行结果:
线程池只有一个线程 所有多个任务是排队进入
多线程线程池
带缓存的线程池
class threadPool{public static void main(String[] args) throws InterruptedException {long f = System.currentTimeMillis();//-------------------------------------------//创建线程池 带缓存的线程池ExecutorService es = Executors.newCachedThreadPool();for (int i = 0; i < 10; i++) {Thread.sleep(10*i);es.execute(new myR());}es.shutdown();//-------------------------------------------long h = System.currentTimeMillis();System.out.println(h-f);}}
class myR implements Runnable{@Overridepublic void run() {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"执行了");}
}
执行结果
当有任务需要线程 线程池提供新建一个线程 如果有闲置的线程将会使用闲置的线程 最多新建 Integer.Max 个线程
指定线程个数的线程池
class threadPool{public static void main(String[] args) throws InterruptedException {long f = System.currentTimeMillis();//-------------------------------------------//创建线程池 指定个数ExecutorService es = Executors.newFixedThreadPool(3);for (int i = 0; i < 10; i++) {es.execute(new myR());}es.shutdown();//-------------------------------------------long h = System.currentTimeMillis();System.out.println(h-f);}}class myR implements Runnable{@Overridepublic void run() {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"执行了");}}
执行结果
当线程都在使用时 其他任务需要等待空出新线程
延迟执行线程的 线程池
class threadPool{public static void main(String[] args) throws InterruptedException {long f = System.currentTimeMillis();//-------------------------------------------//创建线程池可以更改数字 个数//如果只需要一个可以 使用Executors.newSingleThreadScheduledExecutor();ScheduledExecutorService es = Executors.newScheduledThreadPool(2);for (int i = 0; i < 10; i++) {// 参数: 线程 延迟时间 延迟单位es.schedule(new myR(),1000, TimeUnit.MILLISECONDS);//参数 : 线程 延迟时间 周期 延迟单位es.scheduleAtFixedRate(new myR(),1000,1000, TimeUnit.MILLISECONDS);}//-------------------------------------------long h = System.currentTimeMillis();System.out.println(h-f);}}
class myR implements Runnable{@Overridepublic void run() {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"执行了");}}
执行结果
间隔 一秒 之后执行 任务
java进阶之多线程二线程池相关推荐
- Java进阶知识 - 多线程与线程间通信
CountdownLatch, CyclicBarrier 分别适合什么场景呢? 大部分情况下, 子线程只需要关心自身执行的任务. 但在某些复杂的情况下, 需要使用多个线程来协同完成某个任务, 这就涉 ...
- 【转】细说.NET中的多线程 (二 线程池)
上一章我们了解到,由于线程的创建,销毁都是需要耗费大量资源和时间的,开发者应该非常节约的使用线程资源.最好的办法是使用线程池,线程池能够避免当前进程中大量的线程导致操作系统不停的进行线程切换,当线程数 ...
- java.util.concurrent 多线程框架---线程池编程(四)
java.util.concurrent 结构 Sync:获得/释放(acquire/release) 协议.同步(定制锁.资源管理.其他同步) Channel:放置/取走(put/take) 协议. ...
- Java基础巩固(二)异常,多线程,线程池,IO流,Properties集合,IO工具类,字符流,对象流,Stream,Lambda表达式
一.异常,多线程 学习目标 : 异常的概述 异常的分类 异常的处理方式 自定义异常 多线程入门 1 异常的概述 1.1 什么是异常? 异常就是程序出现了不正常情况 , 程序在执行过程中 , 数据导致程 ...
- java多线程及线程池使用
Java多线程及线程池的使用 Java多线程 一.Java多线程涉及的包和类 二.Java创建多线程的方式 三.Java线程池 1. 创建线程池ThreadPoolExecutor的7个参数 2. 线 ...
- Java多线程之线程池配置合理线程数
Java多线程之线程池配置合理线程数 目录 代码查看公司服务器或阿里云是几核的 合理线程数配置之CPU密集型 合理线程数配置之IO密集型 1. 代码查看公司服务器或阿里云是几核的 要合理配置线程数首先 ...
- Java多线程估算线程池
原理 多线程的线程池可以提高程序的运行性能,这是毋庸置疑的,但是如何设置线程池的大小,以前一直是靠猜,或者根据经验配置,这两天对系统的线程池进行优化配置时,找到了如何合理地估算线程池大小这篇文章,在这 ...
- Java的多线程和线程池的使用,你真的清楚了吗?
Java的多线程和线程池的使用 多线程大大提高程序运行效率,我们在开发过程中经常会开启一个线程来执行一些费时的任务.开启一个线程有4种方式,在下面的文章我将详细的去讲解. 继承Thread 继承Thr ...
- Java多线程之线程池的手写改造和拒绝策略
Java多线程之线程池的手写改造和拒绝策略 目录 自定义线程池的使用 四种拒绝策略代码体现 1. 自定义线程池的使用 自定义线程池(拒绝策略默认AbortPolicy) public class My ...
最新文章
- 【高精度】被限制的加法
- [HEOI2014]平衡(整数划分数)
- 带有.rdlc报表的项目发布需要注意的问题
- 程序员如何选择适合的公司
- Swift 5 将进一步减小 iOS 应用安装包大小
- MyBatis Mapper Demo
- 计算机毕业论文多久,计算机毕业论文
- 变,从南到北,从北到南...
- Remote desktop manager共享账号
- 《Java核心技术》 -- 读书笔记 ② - 类 | 对象 | 接口
- 生产者消费者---线程管道
- 注册flash.ocx inno setup (转)
- 【BIRT】在页面上展示xxxx年xx月xx日
- linux趋势防病毒软件进程,你了解linux的防病毒软件吗?你知道我说的不是防火墙...
- Pytorch优化器全总结(二)Adadelta、RMSprop、Adam、Adamax、AdamW、NAdam、SparseAdam
- 卷积神经网络基础知识
- pycharm 连接数据库报错
- 老旧笔记本电脑变服务器(笔记本电脑+内网穿透)
- SylixOS中的中断接口基础实现
- jQuery UI 使用心得及技巧