欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Java多線程中從線程返回數(shù)據(jù)的兩種方法是什么

Java多線程中從線程返回數(shù)據(jù)的兩種方法是什么,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)與策劃設(shè)計,丘北網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:丘北等地區(qū)。丘北做網(wǎng)站價格咨詢:18980820575

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

一、通過類變量和方法返回數(shù)據(jù)

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

package mythread;   public class MyThread extends Thread  {      private String value1;      private String value2;       public void run()      {          value1 = "通過成員變量返回數(shù)據(jù)";          value2 = "通過成員方法返回數(shù)據(jù)";      }      public static void main(String[] args) throws Exception      {          MyThread thread = new MyThread();          thread.start();          System.out.println("value1:" + thread.value1);          System.out.println("value2:" + thread.value2);      }  }

運行上面的代碼有可能輸出如下的結(jié)果:

value1:null
value2:null

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

sleep(1000);

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

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

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

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

while (thread.value1 == null || thread.value2 == null)      sleep(100);

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

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

thread.start();
thread.join();

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

二、通過回調(diào)函數(shù)返回數(shù)據(jù)

通過Work類的process方法向線程中傳遞了計算結(jié)果,但同時,也通過process方法從線程中得到了三個隨機數(shù)。因此,這種方法既可以向線程中傳遞數(shù)據(jù),也可以從線程中獲得數(shù)據(jù)。

看完上述內(nèi)容,你們掌握Java多線程中從線程返回數(shù)據(jù)的兩種方法是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

分享名稱:Java多線程中從線程返回數(shù)據(jù)的兩種方法是什么
本文地址:http://chinadenli.net/article34/jgjose.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、ChatGPT、手機網(wǎng)站建設(shè)、小程序開發(fā)、響應(yīng)式網(wǎng)站企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
最新69国产精品视频| 中文字字幕在线中文乱码二区 | 亚洲美女国产精品久久| 免费大片黄在线观看国语| 真实偷拍一区二区免费视频| 一区二区不卡免费观看免费| 色综合视频一区二区观看| 日本东京热视频一区二区三区| 久久综合九色综合欧美| av免费视屏在线观看| 亚洲欧美视频欧美视频| 欧美av人人妻av人人爽蜜桃| 97人妻精品一区二区三区免| 国产免费无遮挡精品视频| 欧美午夜性刺激在线观看| 欧美日韩免费黄片观看| 国内九一激情白浆发布| 日本一级特黄大片国产| 亚洲中文字幕三区四区| 国产一区二区三区色噜噜| 亚洲av熟女国产一区二区三区站| 欧美日韩国产成人高潮| 99久久免费中文字幕| 隔壁的日本人妻中文字幕版| 天堂网中文字幕在线观看| 日韩一区二区三区嘿嘿| 老熟妇2久久国内精品| 国产成人精品视频一区二区三区| 精品久久av一二三区| 精品国产亚洲免费91| 91免费精品国自产拍偷拍| 国产乱久久亚洲国产精品| 国产欧美日本在线播放| 国产三级视频不卡在线观看| 亚洲精品黄色片中文字幕| 国产亚洲成av人在线观看| 日韩精品小视频在线观看| 欧美日韩国产精品自在自线| 亚洲二区欧美一区二区| 亚洲国产成人一区二区在线观看| 国产精品一区二区视频成人|