织梦网站上线,做网站的收益,网站正在建设中页面 英文翻译,个人网站要不要备案什么是线程池#xff1f;
线程池#xff1a;就是一个容纳多个线程的容器#xff0c;其中的线程可以反复使用#xff0c;省去了频繁创建线程对象的操作#xff0c;无需反复创建线程而消耗过多资源。
为什么用线程池#xff1f;
线程池的优势#xff1a;线程池做的工作…什么是线程池
线程池就是一个容纳多个线程的容器其中的线程可以反复使用省去了频繁创建线程对象的操作无需反复创建线程而消耗过多资源。
为什么用线程池
线程池的优势线程池做的工作主要是控制运行的线程数量处理过程中将任务放入队列然后在线程创建后启动这些任务如果线程数量超过了最大数量超出数量的线程排队等候等其他线程执行完毕再从队列中取出任务来执行。
线程池的主要特点为线程复用控制最大并发数管理线程。
降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时任务可以不需要等待线程创建就能立即执行。提高线程的可观理性。线程是稀缺资源如果无限制的创建不仅会消耗系统资源还会降低系统的稳定性使用线程池可以进行统一的分配调优和监控。
线程池的使用
Java里面线程池的顶级接口是java.util.concurrent.Executor但是严格意义上讲Executor并不是一个线程池而只是一个执行线程的工具。真正的线程池接口是java.util.concurrent.ExecutorService。要配置一个线程池是比较复杂的尤其是对于池的原理不是很清楚的情况下很有可能配置的线程池不是较优的因此在java.util.concurrent.Executors线程工厂类里面提供了一些静态工厂生成一些常用的线程池。官方建议使用Executors工程类来创建线程池对象。
Executors类中创建线程池的方法如下
newFixedThreadPool创建一个固定长度的线程池当到达线程最大数量时线程池的规模将不再变化。一池有N个固定的线程。newSingleThreadPoolExecutor创建一个单线程的Executor确保任务对了串行执行。一池一线程newCachedThreadPool创建一个可缓存的线程池如果当前线程池的规模超出了处理需求将回收空的线程当需求增加时会增加线程数量线程池规模无限制。动态的创建线程来了任务就创建线程运行当线程空闲超过60秒就销毁线程。newScheduledThreadPool创建一个固定长度的线程池而且以延迟或者定时的方式来执行类似Timer。
线程池的execute方法和submit有什么区别
1、参数
execute Runnablesubmit Callable
2、返回值
execute voidsubmit Future
3、异常
execute 会在子线程中抛出异常在主线程中铺捉不到submit 不会立马抛出异常而是会将异常暂时存起来等Future.get()方法的时候才会抛出可以在主线程捕捉处理异常更方便
超级大坑 在工作中单一的/固定数的/可变的三种创建线程池的方法哪个用的多
一个都不用工作中只能使用自定义的。
线程池中的2个关闭方法
shutdown线程池不再接口新任务内部会将所有已提交的任务处理完毕处理完毕之后工作线程自动退出。
shutdownNow线程池会将还未处理的在队里等待处理的任务任务移除将正在处理中的处理完毕之后工作线程自动退出。
至于调用哪个方法来关闭线程应该由提交到线程池的任务特性决定多数情况下调用shutdown方法来关闭线程池如果任务不一定要执行完则可以调用shutdownNow方法。