中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

SwingWorker()構造器的線程是怎樣的

發布時間:2021-12-24 15:49:26 來源:億速云 閱讀:99 作者:柒染 欄目:編程語言

今天就跟大家聊聊有關SwingWorker()構造器的線程是怎樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

演示程序用SwingWorker()構造器在后臺執行費時的操作,然后更新UI。
這個新的實現還基于DougLea的util.concurrent包的FutureResult類。由于大量依賴了FutureResult所做的工作,SwingWorker類的實現是簡單而靈活的。
本節的余下部分更詳細地描述了實現的細節,請繼續往下看或直接跳到后面下載源碼。
RunnableFutureResult

FutureResult,正如它的名字所暗示的,它是用來保持某動作的結果的。它被設計成和一個Callable共同使用,Callable是一個會返回結果的runnable動作:

publicinterfaceCallable{  Objectcall()throwsException;  }

新的SwingWorker是一個RunnableFutureResult。在運行時,它把結果設成construct()的返回值,然后在事件派發線程中調用finished()方法。(注意:SwingWorker是一個抽象類;你要子類化它并實現construct()和finished()。)
下面的代碼來自SwingWorker的run()方法:

Callablefunction=newCallable(){  publicObjectcall()throwsException{  returnconstruct();  }  };
RunnabledoFinished=newRunnable(){  publicvoidrun(){  finished();  }  };   setter(function).run();  SwingUtilities.invokeLater(doFinished);

***段把construct()轉換成一個Callable動作,第二段把finished()轉換成作為Runnable的doFinished。然后setter(function)被運行,doFinished被調用。
setter(function)

上面缺少的部分是setter(function)。它創建一個刻板的Runnable。在運行時,這個Runnable調用參數指定的function,然后給結果設置返回值。下面是來自FutureResult的代碼:

publicRunnablesetter(finalCallablefunction){  returnnewRunnable(){  publicvoidrun(){  try{  set(function.call());  }  catch(Throwableex){  setException(ex);  }  }  };  }

注意try-catch塊所作的防護。如果construct()拋出任何東西(Exception、Error等等),都會被捕捉并記錄下來。
不要搶跑:先construct,再start

調用start()來啟動worker線程。這是修訂版的SwingWorker和原來版本的一個重要區別。
在原來的版本中,SwingWorker()構造器自動啟動線程,這種做法帶來了一個線程和子類構造器競爭的危險:當SwingWorker()構造器已啟動了線程,而子類的構造器還沒完成。彌補方法是,先構造SwingWorker,然后再調用start()。
順便一提,RemoteTable并不調用start()。正確來說,SwingWorker是作為一個Runnable被QueuedExecutor執行的。

看完上述內容,你們對SwingWorker()構造器的線程是怎樣的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

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

AI

常州市| 区。| 淮滨县| 赞皇县| 馆陶县| 泊头市| 五原县| 宝兴县| 淮滨县| 江达县| 绥芬河市| 景谷| 卫辉市| 万山特区| 绥棱县| 个旧市| 定远县| 海南省| 留坝县| 涞源县| 萝北县| 临沂市| 利辛县| 武城县| 嵊州市| 南陵县| 图片| 克拉玛依市| 红河县| 商洛市| 万盛区| 砚山县| 资兴市| 乌拉特前旗| 徐水县| 读书| 灵川县| 高邑县| 宜良县| 建宁县| 东乌|