91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Future和Callable怎么使用

發布時間:2022-03-17 17:11:35 來源:億速云 閱讀:187 作者:iii 欄目:web開發

這篇“Future和Callable怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Future和Callable怎么使用”文章吧。

一、先說明啟動線程的兩種方式:

1、 繼承Thread,重載run方法,執行start方法

Class MyThread extends Thread{

      @Override

           Void run(){

}

}

new MyThread().start();

2、 實現Runnable接口

Class MyTask implements Runnable {

      Void run(){}          

}

new Thread( new MyTask()).start();

這里順便說下 new MyThread().start()和new MyThread().run();執行的區別,前者會啟動一個線程執行run方法,后者是在本線程中執行run方法

二、再明確幾個概念:

Callable接口和Runnable接口一樣,也可通過實現該接口啟動線程,但是Callable接口的run方法有返回值。

Future接口,相當于是對Callable進行了封裝:

public interface Future {

    boolean cancel(boolean mayInterruptIfRunning);

    boolean isCancelled();

    boolean isDone();

    V get() throws InterruptedException, ExecutionException;

    V get(long timeout, TimeUnit unit)

        throws InterruptedException, ExecutionException, TimeoutException;

}

FutureTask是Future的一個實現,使用實例:

FutureTask futureTask = new FutureTask(new Callable(){});

new Thread(futureTask).start();  

MyResult  r = futureTask.get();

執行start方法后會執行Callable的run方法

調用futureTask 的get方法會執行,并判斷是否執行完,如果run執行完了直接返回結果,否則的話會awaitDone阻塞,當start方法中的Callable方法執行完后會判斷有沒有阻塞的線程有的話會喚醒(LockSupport.parkNanos阻塞,LockSupport.unpark(thread)喚醒);注意當有多個線程阻塞的時候,是以鏈表形式存儲的,喚醒的時候也是依次喚醒

以上就是關于“Future和Callable怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平山县| 临漳县| 张家口市| 丹江口市| 正定县| 闵行区| 乌拉特后旗| 宜宾市| 涪陵区| 波密县| 石渠县| 丰顺县| 乐业县| 宁乡县| 保亭| 巴南区| 信丰县| 宕昌县| 桑日县| 荥阳市| 合水县| 汉寿县| 荃湾区| 化州市| 饶阳县| 铜山县| 仙桃市| 新密市| 古蔺县| 天水市| 新乡县| 资阳市| 织金县| 黄陵县| 长顺县| 古丈县| 陆丰市| 二连浩特市| 文安县| 永清县| 工布江达县|