FutureTask實現的功能
它的功能就像他繼承的接口一樣:Runnable與Future。他實現了一套機制將兩者連接起來。
Runnable主要方法是run(),用於執行一些程序。
Future主要用兩個功能:get和cancel。
FutureTask就是將他們兩者聯系起來。即run()運行完之后如何讓get能拿到數據;當數據沒有返回時get如何阻塞和當完成后讓get返回;如何讓用戶取消當前任務。
Future中get方法的實現
get方法是帶阻塞的。當線程運行完成可以直接通過get獲取數據,當線程未完成計算則阻塞當前線程,知道運行完成解除阻塞。
這個場景是很典型的阻塞-喚醒,其內部使用LockSupport實現。當用戶調用get方法后將該線程加入鏈表,並阻塞。當run方法完成,喚醒所有鏈表中所有阻塞的線程,各線程返回數據。