java多线程之线程池

1.线程池的作用

    如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。

    那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务,在Java中可以通过线程池来达到这样的效果。

2.创建线程池

    java创建线程池只需要调用Executors中相应的方法就可以了,。

 3.ThreadPoolExecutor类

    上述所有方法其实都在方法内部条用一个 ThreadPoolExecutor类,构造方法内容如下:

构造参数意义如下:
1、corePoolSize 核心线程池大小;
2、maximumPoolSize 线程池最大容量大小;
3、keepAliveTime 线程池空闲时,线程存活的时间;
4、TimeUnit 时间单位;
5、ThreadFactory 线程工厂;
6、BlockingQueue任务队列;
7、RejectedExecutionHandler 线程拒绝策略;

4.线程执行方法:submit和execute类

 5.如何正确使用线程池

不要使用Executors.newXXXThreadPool()创建线程池,因为这种方式会使用无界的任务队列,为避免OOM我们应该使用ThreadPoolExecutor的构造方法创建线程池:
这样的明确指定参数的处理方式虽然很麻烦,但是会让写代码的人更加明确线程池的运行规则,规避资源耗尽的风险。

所以正确的打开方式如下:

 

posted @ 2023-02-23 11:00  狗狗听话  阅读(85)  评论(0编辑  收藏  举报