阅读更多
Java的Future模式
runnable与thread的run方法是没有返回值的
thread.join()
join()方法的作用是调用线程等待该线程完成后,才能继续往下运行。
就是调用thread.join()的线程等待thread完成后才能继续往下运行
Callable接口可以看作是Runnable接口的补充,call方法带有返回值,并且可以抛出异常。
get方法:获取计算结果(如果还没计算完,也是必须等待的)
cancel方法:还没计算完,可以取消计算过程
isDone方法:判断是否计算完
isCancelled方法:判断计算是否被取消
put在放入数据时,如果放入数据的key已经存在与Map中,最后放入的数据会覆盖之前存在的数据,
putIfAbsent 如果传入key对应的value已经存在,就返回存在的value,不进行替换。如果不存在,就添加key和value,返回null
ConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,
在并发的环境下,通过FutureTask作为中间转换,成功实现了让某个方法只被一个线程执行。
https://www.cnblogs.com/cz123/p/7693064.html
当然也可以自己使用线程队列的方式实现
private static final int NEW = 0; //任务新建和执行中
private static final int COMPLETING = 1; //任务将要执行完毕
private static final int NORMAL = 2; //任务正常执行结束
private static final int EXCEPTIONAL = 3; //任务异常
private static final int CANCELLED = 4; //任务取消
private static final int INTERRUPTING = 5; //任务线程即将被中断
private static final int INTERRUPTED = 6; //任务线程已中断
FutureTask 调用run方法不会新建线程,只是普通的方法调用,但会更新FutureTask里的状态,调用get时也会被阻塞的
FutureTask里的get方法也是通过LockSupport来实现线程自我阻塞的
https://www.cnblogs.com/cz123/p/7693064.html(彻底理解Java的Future模式)
https://www.cnblogs.com/dolphin0520/p/3949310.html(Java并发编程:Callable、Future和FutureTask)