理解Java FutureTask


FutureTask實現的功能

它的功能就像他繼承的接口一樣:Runnable與Future。他實現了一套機制將兩者連接起來。
Runnable主要方法是run(),用於執行一些程序。
Future主要用兩個功能:get和cancel。

FutureTask就是將他們兩者聯系起來。即run()運行完之后如何讓get能拿到數據;當數據沒有返回時get如何阻塞和當完成后讓get返回;如何讓用戶取消當前任務。

Future中get方法的實現

get方法是帶阻塞的。當線程運行完成可以直接通過get獲取數據,當線程未完成計算則阻塞當前線程,知道運行完成解除阻塞。

這個場景是很典型的阻塞-喚醒,其內部使用LockSupport實現。當用戶調用get方法后將該線程加入鏈表,並阻塞。當run方法完成,喚醒所有鏈表中所有阻塞的線程,各線程返回數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM