java并发包中的线程池种类特性

1、new Thread的弊端
a. 每次new Thread新建对象性能差。
b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom。
c. 缺乏更多功能,如定时执行、定期执行、线程中断。
相比new Thread,Java提供的五种线程池的好处在于:
a. 重用存在的线程,减少对象创建、消亡的开销,性能佳。
b. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。
c. 提供定时执行、定期执行、单线程、并发数控制等功能。

2、Java五种线程池
newCachedThreadPool:线程池里有很多线程需要同时执行,老的可用线程将新的任务触发重新执行,如查线程超过60秒内没执行,那么将被终止并从池中删除。
newFixedThreadPool:拥有固定线程数的线程池,如果没有任务执行,那么线程会一直等待;可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool:创建一个周期线程池,支持定时及周期性任务执行。
newSingleThreadExecutor:只有一个线程的线程池,因此所有提交的任务的顺序执行。
newSingleScheduledPool:只有一个线程的线程池,用来调度任务在招商定时间执行。

ExecutorService executorService = Executors.newCachedThreadPool();

for (int i = 0; i < 100; i++) {
try {
executorService.execute(() -> {
System.out.println("----->>>"+Thread.currentThread().getName());
});
} catch (Exception e) {
e.printStackTrace();
}
}

executorService.execute(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100000; i++) {
System.out.println(Thread.currentThread().getName() + “执行” + “No.” + i);
}
}
});
executorService.shutdown();

// 创建线程的可选参数
/**
int corePoolSize,核心线程数,就是一直存在的线程(不管用不用)
int maximumPoolSize,最大线程数,就是最多可以创建多少个线程;
long keepAliveTime,多余的线程(最大线程数 减去 核心线程数)空闲时存活的时间;
TimeUnit unit,空闲时间单位 TimeUnit.MILLISECONDS
BlockingQueue workQueue,工作队列,当核心线程数都在执行任务时,再进来的任务就会添加到工作队列中;
ThreadFactory threadFactory,线程工厂,用来创建初始的核心线程
RejectedExecutionHandler handler拒绝策略,当所有线程都在执行任务,且工作队列也满时,再进来的任务就会被执行拒绝策略(比如丢弃)
**/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空 | 永恒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值