java线程池的实现原理

jdk自带的线程池有ThreadPoolExecutor、ScheduledExecutorService、ScheduledThreadPoolExecutor、ExecutorService,我们可以使用工具类Executors来创建。简单看看线程池ThreadPoolExecutor的实现原理。

1.使用线程池的原因

由于创建和回收线程的成本比较高,所以我们会使用线程池来减少线程的频繁创建和回收。而我们所说的创建线程并不是指new Thread()而是指调用start()方法。细想一下确实如此,因为new Thread()只是操作java的内存,并没有和操作系统进行交互,而start()方法才会调用native()方法去创建进程,这才是成本高的原因(见:https://www.cnblogs.com/sunnybug/p/5568626.html)。所以我们如果使用线程池的目的就是要减少start()方法的调用。然后想象一下,如果要你来实现线程池,是不是觉得原理其实很简单呢?

2.ThreadPoolExecutor 的实现原理

是的。ThreadPoolExecutor其实就是创建了几个线程,一直不停的进行while()循环,在每一次循环中的操作就是:取出咱们想要执行的Runnable,然后调用Runnable的run()方法。因为调用的是run()方法,不会涉及到操作系统创建新进程的操作,而是和调用任何一个其他java方法一样,所以就减少了线程的创建和回收。

当然,除此之外,还会有其他功能:remove()、shutdown()、awaitTermination()以及keepAliveTime的概念等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值