个人未授权做的网站,软件关键词排名,唯品会一家做特卖的网站 分析,建设摩托官方网站线程池中shutdown()和shutdownNow()方法的区别
一般情况下#xff0c;当我们频繁的使用线程的时候#xff0c;为了节约资源快速响应需求#xff0c;我们都会考虑使用线程池#xff0c;线程池使用完毕都会想着关闭#xff0c;关闭的时候一般情况下会用到shutdown和shutdow…线程池中shutdown()和shutdownNow()方法的区别
一般情况下当我们频繁的使用线程的时候为了节约资源快速响应需求我们都会考虑使用线程池线程池使用完毕都会想着关闭关闭的时候一般情况下会用到shutdown和shutdownNow这两个函数都能够用来关闭线程池那么他们俩之间的区别是什么呢下面我就用一句话来说明白shutdown和shutdownNow的区别。
一、一句话说明白shutdown和shutdownNow的区别
shutdown只是将线程池的状态设置为SHUTWDOWN状态正在执行的任务会继续执行下去没有被执行的则中断。
而shutdownNow则是将线程池的状态设置为STOP正在执行的任务则被停止没被执行任务的则返回。
举个工人吃包子的例子一个厂的工人Workers正在吃包子可以理解为任务假如接到shutdown的命令那么这个厂的工人们则会把手头上的包子给吃完没有拿到手里的笼子里面的包子则不能吃而如果接到shutdownNow的命令以后呢这些工人们立刻停止吃包子会把手头上没吃完的包子放下更别提笼子里的包子了。
1、shutDown()
当线程池调用该方法时,线程池的状态则立刻变成SHUTDOWN状态。此时则不能再往线程池中添加任何任务否则将会抛出RejectedExecutionException异常。但是此时线程池不会立刻退出直到添加到线程池中的任务都已经处理完成才会退出。
2、shutdownNow()
执行该方法线程池的状态立刻变成STOP状态并试图停止所有正在执行的线程不再处理还在池队列中等待的任务当然它会返回那些未执行的任务。 它试图终止线程的方法是通过调用Thread.interrupt()方法来实现的但是大家知道这种方法的作用有限如果线程中没有sleep 、wait、Condition、定时锁等应用, interrupt()方法是无法中断当前的线程的。所以ShutdownNow()并不代表线程池就一定立即就能退出它可能必须要等待所有正在执行的任务都执行完成了才能退出。