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的构造方法创建线程池:
这样的明确指定参数的处理方式虽然很麻烦,但是会让写代码的人更加明确线程池的运行规则,规避资源耗尽的风险。
所以正确的打开方式如下: