多线程中一些接口及类之间的关系

Callable, Runnable, Futher, FutherTask:

Runnale:接口,里面有一个run方法,无返回值,代表一个任务。
Callable:接口,里面有一个带返回值的方法call,返回值为泛型T,也代表一个任务。
Futher:接口,里面有五个重要的方法,用来获取任务及其状态。
cancle(xxx):xxx是一个boolean类型的值,为true代表可以取消正在执行的任务。
isCancled():判断当前任务是否已经取消掉
isDone():判断当前任务是否已经做完
get() ,get(time ,Utile.time):获取任务返回值,未执行完任务时阻塞。带时间的表示等待指定时间后,如果还未执行完就不在等待获取结果了。
RunnaleFuther:继承了Runnale与Futher接口。
FutherTask:实现了RunnableTuther接口。 构造器需要一个Callable的实现类。 可以看出RunnableFuture继承了Runnable接口和Future接口,而FutureTask实现了RunnableFuture接口。所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值。

Executer,ExecuterService,AbstractExecuterService,ThreadPoolExecuter:

Executer:顶级接口,声明了一个execute(Runnale)方法,用来提交任务。
ExecuterService:继承Executer接口,并添加了Futher submit(Runnable),Futher submit(Callable),shutdown()。
AbstractExecuterService:实现了ExecuterService接口,并实现了所有方法
ThreadPoolExecuter:继承了AbstractExecuterService。
几个重要的方法:
execute()
submit()
shutdown()
shutdownNow()
  execute()方法实际上是Executor中声明的方法,在ThreadPoolExecutor进行了具体的实现,这个方法是ThreadPoolExecutor的核心方法,通过这个方法可以向线程池提交一个任务,交由线程池去执行。

submit()方法是在ExecutorService中声明的方法,在AbstractExecutorService就已经有了具体的实现,在ThreadPoolExecutor中并没有对其进行重写,这个方法也是用来向线程池提交任务的,但是它和execute()方法不同,它能够返回任务执行的结果,去看submit()方法的实现,会发现它实际上还是调用的execute()方法,只不过它利用了Future来获取任务执行结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值