亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

通许县| 奈曼旗| 额尔古纳市| 肇州县| 咸丰县| 汨罗市| 醴陵市| 太和县| 保靖县| 永春县| 包头市| 玛纳斯县| 西乌珠穆沁旗| 木里| 惠州市| 托克逊县| 潮安县| 富顺县| 崇文区| 慈溪市| 长宁县| 阿克苏市| 黔东| 伊通| 行唐县| 河东区| 承德县| 手游| 奉节县| 衡山县| 鄄城县| 博兴县| 北海市| 涿鹿县| 望城县| 郑州市| 广灵县| 达州市| 台南县| 湖北省| 和田市|