黄色在线观看视频-黄色在线免费看-黄色在线视频免费-黄色在线视频免费看-免费啪啪网-免费啪啪网站

首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載
2012中考 | 2012高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 托業 | 雅思 | 專四專八 | 口譯筆譯 | 博思
GRE GMAT | 新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 |
零起點法語 | 零起點德語 | 零起點韓語
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證
華為認證 | Java認證
公務員 | 報關員 | 銀行從業資格 | 證券從業資格 | 期貨從業資格 | 司法考試 | 法律顧問 | 導游資格
報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師
人力資源 | 管理咨詢師 | 秘書資格 | 心理咨詢師 | 出版專業資格 | 廣告師職業水平 | 駕駛員
網絡編輯 | 公共營養師 | 國際貨運代理人 | 保險從業資格 | 電子商務師 | 普通話 | 企業培訓師
營銷師
衛生資格 | 執業醫師 | 執業藥師 | 執業護士
會計從業資格考試會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師
注冊資產評估師 | 高級會計師 | ACCA | 統計師 | 精算師 | 理財規劃師 | 國際內審師
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監理工程師 | 安全工程師
質量工程師 | 物業管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師
設備監理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環境影響評價師 | 環保工程師
城市規劃師 | 公路監理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師
化工工程師 | 材料員
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲
計算機等級考試
您現在的位置: 考試吧(Exam8.com) > 計算機等級考試 > 計算機二級 > JAVA > 復習資料 > 正文

2012年計算機二級Java多線程入門技巧(四)

來源:考試吧Exam8.com) 2012-6-25 17:19:52 考試吧:中國教育培訓第一門戶 模擬考場

  從線程返回數據的兩種方法

  從線程中返回數據和向線程傳遞數據類似。也可以通過類成員以及回調函數來返回數據。但類成員在返回數據和傳遞數據時有一些區別,下面讓我們來看看它們區別在哪。

  一、通過類變量和方法返回數據

  使用這種方法返回數據需要在調用start方法后才能通過類變量或方法得到數據。讓我們先來看看例程2-13會得到什么結果。

  package mythread;

  2.

  3.public class MyThread extends Thread

  4.{

  5. private String value1;

  6. private String value2;

  7.

  8. public void run()

  9. {

  10. value1 = "通過成員變量返回數據";

  11. value2 = "通過成員方法返回數據";

  12. }

  13. public static void main(String[] args) throws Exception

  14. {

  15. MyThread thread = new MyThread();

  16. thread.start();

  17. System.out.println("value1:" + thread.value1);

  18. System.out.println("value2:" + thread.value2);

  19. }

  20.}

  運行上面的代碼有可能輸出如下的結果

  value1:null

  value2:null

  從上面的運行結果看很不正常。在run方法中已經對value1和value2賦了值,而返回的卻是null.發生這種情況的原因是調用start方法后就立刻輸出了value1和value2的值,而這里run方法還沒有執行到為value1和value2賦值的語句。要避免這種情況的發生,就需要等run方法執行完后才執行輸出value1和value2的代碼。因此,我們可以想到使用sleep方法將主線程進行延遲,如可以在thread.start()后加一行如下的語句

  sleep(1000);

  這樣做可以使主線程延遲1秒后再往下執行,但這樣做有一個問題,就是我們怎么知道要延遲多長時間。在這個例子的run方法中只有兩條賦值語句,而且只創建了一個線程,因此,延遲1秒已經足夠,但如果run方法中的語句很復雜,這個時間就很難預測,因此,這種方法并不穩定。

  我們的目的就是得到value1和value2的值,因此,只要判斷value1和value2是否為null.如果它們都不為null時,就可以輸出這兩個值了。我們可以使用如下的代碼來達到這個目的。

  21.while (thread.value1 == null || thread.value2 == null);

  使用上面的語句可以很穩定地避免這種情況發生,但這種方法太耗費系統資源。大家可以設想,如果run方法中的代碼很復雜,value1和value2需要很長時間才能被賦值,這樣while循環就必須一直執行下去,直到value1和value2都不為空為止。因此,我們可以對上面的語句做如下的改進。

  22.while (thread.value1 == null || thread.value2 == null)

  23. sleep(100);

  在while循環中第判斷一次value1和value2的值后休眠100毫秒,然后再判斷這兩個值。這樣所占用的系統資源會小一些。

  上面的方法雖然可以很好地解決,但Java的線程模型為我們提供了更好的解決方案,這就是join方法。在前面已經討論過,join的功能就是使用線程從異步執行變成同步執行。當線程變成同步執行后,就和從普通的方法中得到返回數據沒有什么區別了。因此,可以使用如下的代碼更有效地解決這個問題:

  thread.start();

  thread.join();

  在thread.join()執行完后,線程thread的run方法已經退出了,也就是說線程thread已經結束了。因此,在thread.join()后面可以放心大膽地使用MyThread類的任何資源來得到返回數據。

  二、通過回調函數返回數據

  其實這種方法已經在《向線程傳遞數據的三種方法》中介紹了。在《向線程傳遞數據的三種方法》一文的例子中通過Work類的process方法向線程中傳遞了計算結果,但也通過process方法從線程中得到了三個隨機數。因此,這種方法既可以向線程中傳遞數據,也可以從線程中獲得數據。

  相關推薦:

  2012年下半年計算機等級考試報名時間及入口匯總

  計算機等級考試三級PC技術過關心得技巧

  2012年3月計算機二級考試真題匯總

文章搜索
版權聲明:如果計算機等級考試網所轉載內容不慎侵犯了您的權益,請與我們聯系800@exam8.com,我們將會及時處理。如轉載本計算機等級考試網內容,請注明出處。
主站蜘蛛池模板: 欧美巨大另类极品video | 国产欧美高清 | 国产成人精品视频在放 | 免费看黄视频 | 欧美xx视频 | 黄色爱爱网站 | 草草影院第一页yycccom | 毛片免费毛片一级jjj毛片 | 亚洲国产天堂久久综合网站 | 丁香激情小说 | 久久w5ww成w人免费不卡 | 男女交性过程视频无遮挡在线 | 日本精品久久久免费高清 | 日本免费成人网 | 看黄色片视频 | 99在线热视频 | 国产1卡2卡三卡四卡网站 | 日韩在线第三页 | 免费黄色福利视频 | 一区二区三区四区视频在线观看 | 在线播放成人高清免费视频 | 91看片片 | 久草香蕉视频 | 欧美成人精品一级高清片 | 日韩三级在线免费观看 | 麻豆成人传媒一区二区 | 特级黄国产片一级视频播放 | 日韩不卡一级毛片免费 | 免费丝袜足控网站 | 美国十次狠狠色综合 | 欧美激情视频二区三区 | 性色生活片在色在线观看 | 三级黄色短视频 | 一个人看的免费高清视频www | 一级黄色性生活视频 | 日韩字幕一中文在线综合 | 久久本道综合色狠狠五月 | 亚洲综合色视频在线观看 | 一个人看的www片免费高清中文 | 国产精品日韩在线观看 | 日日噜噜夜夜躁躁狠狠 |