JAVA 多线程解析

Java中的所有的多线程实现方式其实只有一种,那就是Runnable实现方式
Thread是实现了Runnable
Callable底层就是一个计算接口,本身和多线程没有任何关系
Future和多线程挂钩,但也是仅此而已,因为他只有cancel、isCanceled、isDone、get方法

Callable和Future和Rannable通过一系列的组合操作,才让开发者感觉Callable也是实现多线程的一种方式

首先Future跟Runnable组合形成了RunnableFuture,而FutureTask则是实现了RunnableFuture,相当于FutureTask是同时实现了Runnable和Feature,且FutureTask中的成员变量有Callable、outcome,Thread
然后看FutureTask实现的run方法不难发现方法中定义了一个局部变量,之后调用Callable的call方法,并把call方法的返回值赋值给局部变量,之后调用set方法主要是CAS把当前线程的状态从new改成completing然后给outcome赋值,并设置是正常返回
而FutureTask的get方法则是通过判断是否正常返回返回对应的outcome或者异常

而再之后的AbstractExecutorService则是实现了ExecutorService,而ExecutorService是实现了Executors,而AbstractExecutorService的submit方法则是先把Runnable封装成FutureTask(上面的父类有Runnable),之后执行Executors的execute(Runnable)方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值