java线程执行器

1.简介:

从Java5开始,java并发API提供了执行器框架(Executor Framwwork)。它围绕Executor接口,ExecutorService接口,以及实现类ThreadPoolExecutor进行展开。该机制分离了任务的创建和运行,我们只需要关注任务的创建,而不需要考虑线程的创建和执行。

2.优势:

(1)执行器使用了线程池来提高程序性能,线程重用的优点是减少了创建线程的时间花销。

(2)提供了Callable接口


3.创建线程执行器


3.1创建线程执行器的2种方式

(1)ThreadPoolExecutor类提供了4个构造器(使用较少,不做简介)

(2)Executors工厂类

3.2创建缓存线程池执行器

(1)Executors.newCachedThreadPool()

(2)使用情况:仅当线程的数量是合理的或者线程只会执行很短的时间,因为若缓存线程池中没有空闲线程可以使用,它为每个新任务都创建新的线程。

(3)缺点:若发送给缓存线程池过多的任务,系统负荷会过载

(4)注:线程池需要显示关闭,若不结束,执行器将继续执行,java程序也不会结束(java程序只有在所有非守护线程结束时才会结束)

3.3创建具有线程最大数量值的执行器

(1)Executors.newFixedThreadPool();

3.4创建只有单个线程的执行器

(1)Executos.newSingleThreadExecutor();


4.常用方法

(1)shutdownNow():当执行器执行完所有任务后,它将结束。若结束时有任务还未执行,它将返回等待执行的任务列表。若有任务正在执行,任务会继续执行。但是该方法不会等待任务完成。

(2)shutdow():当前执行器执行完所有待运行的任务后会结束。因为当该方法被调用后,ThreadPoolExecutor类的awaitTermination()方法会将线程休眠直到所有任务结束。注:若执行完该方法后,再继续尝试发送任务给执行器,执行器会抛出RejectExecutorException异常。
(2)getPoolSize():返回执行器线程池中实际线程数。

(3)getActiveCount():返回线程池中正在执行任务的线程数

(4)getCompletedTaskCount():返回执行器已经完成的任务数。

(5)isTerminate():若调用了shutdown()或shutdowNow()方法后,并且完成了完毕过程,会返回true。

(6)isShutdown():如果调用了shutdown()方法,那么这个方法就会返回true。

(7)awaitTermination(long timeOut,TimeUnit unit):这个方法将会阻塞所调用的线程,直到执行器完成所有的任务或者到达指定的timeout值。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值