Board logo

标题: Java线程池(2) [打印本页]

作者: look_w    时间: 2019-3-8 19:52     标题: Java线程池(2)

ThreadPoolExecutor类的几个常用方法:

        execute(Runnable command):提交接受到的任务。

        shutdown():队列不在接受新的任务,线程池内的任务执行完后,关闭线程池。

        shutdownNow():队列不接受新的任务,并且队列内任务移除,并尝试停止正在执行的任务,关闭线程池。


        ThreadPoolExecutor类让我们能自主定义出需要的各种线程池,但是每次使用线程池的时候,不想搞这么多参数怎么办?于是Java提供了4中常见的线程池供我们直接使用(通过Executors类创建):
CachedThreadPool(可缓存线程池)




ExecutorService cachedThreadPool=Executor.newCachedThreadPool();

源码:


规则:1.线程数量无限制

            2.有空闲线程用空闲线程,无空闲线程则新建线程。


FixedThreadPool(定长线程池)

ExecutorService fixedThreadPool=Executors.newFixedThreadPool(int nThread);

源码:


规则:1.控制线程最大并发数(即同时执行的线程)

            2.超出的线程在队列中等待。


SingleThreadExecutor(单线程化的线程池)

ExecutorService singleThreadExecutor=Executors.newSingleThreadExecutor();

源码:


规则:1.有且只有一个线程执行。

            2.任务根据入队列规则执行,即先入队列先执行。


ScheduledThreadPool(调度型线程池)

ExecutorService scheduledThreadPool=Executors.newScheduledThreadPool(int corePoolSize);

源码:


规则:1.一定时间后执行或周期性执行。


不难发先,这些常用的线程池其实就是变相调用ThreadPoolExecutor类, 所以说要是没有我们想要的,还是老老实实的写吧。

线程池添加任务有submit和execute,它们的区别:

        1.接受的参数不一样

        2.submit有返回值

        3.execute是Executor接口中唯一定义的方法,submit是ExecutorService接口定义的方法(该接口继承Executor接口)




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0