在单个线程的时候我们可以单个的去开启一个线程
但是在遇到多并发和你并不知道会开启几个线程的时候这样开启线程会造成线程无法控制的情况
这个时候需要使用线程池去管理你的线程
首先感谢作者 Sunzxyong 的博客,侵删
线程池的种类
官方给出的线程池有5种
1 newFixedThreadPool(int nThreads ) :这个方法返回一个固定数量的线程池,线程池中的核心线程数不变
2、newCachedThreadPool() :这个方法返回一个根据实际情况调整的线程池,即核心线程数量不固定,根据具体情况自动调整
3 newSingleThreadExecutor() :只有一个核心线程的线程池,其任务按照FIFO(First in first out 先进先出的规则)执行
4 newScheduledThreadPool() : 可控制线程定时和周期性执行的线程池
5 newSingleThreadScheduledExecutor() : 周期性执行线程的核心线程只有一的线程池,而4 可以指定线程数量
线程池的使用
通过Executors的工厂方法来获取:
//初始化线程最大数量为3的线程池 fixedThreadPool = Executors.newFixedThreadPool(3);
如上是初始化一个核心线程为3的线程池
加入线程
fixedThreadPool.execute(new Runnable){ @Override public void run(){ //你的耗时任务 } }
那么有什么好处呢
1.减少在创建和销毁线程上所花的时间以及系统资源的开销
2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。
当然线程池也可以提供自己定制的使用方法,官方给了很多定制的方法,这里就不做赘诉,以后有机会再写