浅谈Callable与Future

Callable

java5引入java.util.concurrent包,其中包含了locks包、atomic包、线程池(Executors)、阻塞队列(BlockingQueue)、Callable、Future等相关多线程解决方案。
Callable的出现解决Runable没有返回值,无法抛出异常的问题。同时先线程池Executors 提供了许多方法,可以操控 Callable 在线程池中运行。

Future

Executors 执行 Callable 时会返回一个 Future 对象。使用 Future 我们可以得知 Callable 的运行状态,以及获取 Callable 执行完后的返回值。

Future<?> submit(Runnable task);
Future submit(Callable task);

Future 的方法介绍:

  • get() :阻塞式,用于获取 Callable 执行完后的返回值,runable返回null
  • V get(long timeout, TimeUnit unit)throws InterruptedException,ExecutionException, TimeoutException :指定时间线程没有执行完抛出异常TimeoutException
  • boolean cancel(boolean mayInterruptIfRunning) : 撤销正在执行 Callable 的 Task。参数true终止现在正在运行的线程,如果线程在sleep会抛出InterruptedException异常
  • isDone():是否执行完毕。
  • isCancelled():任务是否已经被取消。

Future cancel(true)与interrupt()的区别

  • 使用future调用cancel(true),线程会停止任务。除非线程是Runable且正处于阻塞状态会抛出异常,不会结束进程。
  • 当对一个线程,调用 interrupt() 时,① 如果线程处于被阻塞状态(例如处于sleep, wait, join 等状态),那么线程将立即退出被阻塞状态,并抛出一个InterruptedException异常。仅此而已。② 如果线程处于正常活动状态,那么会将该线程的中断标志设置为 true,仅此而已。被设置中断标志的线程将继续正常运行,不受影响。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值