Android线程篇(三)深入理解Java线程池(一)

Java线程池详解

“Android开发者社区”微信群期待各位加入,我们一起“抠腚”,一起进步,一起探讨技术……
微信ID:393795397 掘金主页:Android开发者社区

为什么要使用线程池呢? 我们知道线程的创建和销毁是非常耗费资源的,有时候创建线程消耗的资源比执行任务所要耗费的资源都要大,为了防止资源不足,程序需要一些办法来限制任何给定时刻处理的请求数目,尽可能减少创建和销毁线程的次数,特别是一些资源耗费比较大的线程的创建和销毁,尽量利用已有对象来进行服务,这就是Java线程池产生的原因,也是它要解决的问题。

下面来讲解Java线程池

Java通过Executors提供了四类线程池:

  1. newFixedThreadPool:创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待,如果线程池中的某个线程由于异常而结束,线程池则会再补充一条新线程。 For example:
        //创建线程数为5的线程池
        var myPool=Executors.newFixedThreadPool(5)
        for (i in 0 until 10){
            myPool.execute(Runnable {
                Thread.sleep(500)
                println("<<<<<Name:"+Thread.currentThread().name+"<<<<"+i)
            })
        }
复制代码

Log:

结论:  任务在1-5个线程执行 2. newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。 延迟2秒后执行线程

 var myPool=Executors.newScheduledThreadPool(5)
        myPool.schedule(Runnable {
             println("<<<<<Name:"+Thread.currentThread().name)

        },2,TimeUnit.SECONDS)
复制代码

延迟1秒后执行线程,之后美俩秒执行一次

var myPool=Executors.newScheduledThreadPool(5)
        myPool.scheduleAtFixedRate(Runnable {
             println("<<<<<Name:"+Thread.currentThread().name)

        },1,2,TimeUnit.SECONDS)
复制代码

Log:

3. newSingleThreadExecutor:创建一个单线程的线程池,即这个线程池永远只有一个线程在运行,这样能保证所有任务按指定顺序来执行。如果这个线程异常结束,那么会有一个新的线程来替代它。

      var myPool=Executors.newSingleThreadExecutor()
        for (i in 0 until 10){
            myPool.execute(Runnable {
                Thread.sleep(500)
                println("<<<<<Name:"+Thread.currentThread().name+"<<<<"+i)
            })
        }

复制代码

Log:

4. newCachedThreadPool:创建一个可缓存线程池,当线程池中有之前创建的可用线程就重用之前的线程,否则就新建一条线程,。如果线程池中的线程在60秒未被使用,就会把它从线程池中移除,可灵活回收空闲线程。

        var myPool=Executors.newCachedThreadPool()
        for (i in 0 until 10){
            myPool.execute(Runnable {
                Thread.sleep(500)
                println("<<<<<Name:"+Thread.currentThread().name+"<<<<"+i)
            })
        }
复制代码

Log:

好了,四种线程池就讲到这里,下篇文章讲解,Java线程池实现原理

转载于:https://juejin.im/post/5a361744f265da432d282dca

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值