手写Callable 了解其运行原理
下面代码是我手写的一个实现callable的实现类。不谈具体实现了什么类容,重点是怎么让这个线程跑起来的。用了submit()方法。
看看源码里面到底是个什么鬼。
看一下submit()方法的源码
我去RunnableFuture 这玩意又是个什么鬼? newTaskFor() 又是个啥玩意?来再往下看
答案:原来RunnableFuture就是个Runnable。再看看newTaskFor()是个啥鬼玩意。
new 一个FutureTask 不知道是啥玩意。再往下看
既然实现了Runnable 肯定是要重写run()方法的嘛。找到run()方法.
返回值 看是用了set(result)方法,又用了report(result)方法,最后用get()方法return report(result);将返回值返回回去。
具体的我就不往下说了,感兴趣的自己可以去看看源码。
说一大堆源码,不如自己去模拟手写一个。
大体步奏:
1.FutureTask实现Runnable 重写run()方法。
2.将Callable 丢进FutureTask里面来, 在run方法中执行call方法
3.get方法拿到返回值。
4.补充get方法的阻塞,run方法跑完前阻塞等待结果。
测试结果就不贴出来了。代码也不过多讲解了,有兴趣的老铁可以对着敲一敲,看看源码。