亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java多線程編程之從線程返回數(shù)據(jù)的兩種方法

 更新時間:2014年01月23日 14:55:07   作者:  
從線程中返回數(shù)據(jù)和向線程傳遞數(shù)據(jù)類似。也可以通過類成員以及回調函數(shù)來返回數(shù)據(jù)。但類成員在返回數(shù)據(jù)和傳遞數(shù)據(jù)時有一些區(qū)別,下面讓我們來看看它們區(qū)別在哪

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

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

復制代碼 代碼如下:

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);
    }
}



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

value1:null
value2:null

從上面的運行結果看很不正常。在run方法中已經(jīng)對value1和value2賦了值,而返回的卻是null。發(fā)生這種情況的原因是調用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方法中的語句很復雜,這個時間就很難預測,因此,這種方法并不穩(wěn)定。
我們的目的就是得到value1和value2的值,因此,只要判斷value1和value2是否為null。如果它們都不為null時,就可以輸出這兩個值了。我們可以使用如下的代碼來達到這個目的:

復制代碼 代碼如下:

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

使用上面的語句可以很穩(wěn)定地避免這種情況發(fā)生,但這種方法太耗費系統(tǒng)資源。大家可以設想,如果run方法中的代碼很復雜,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í)行。當線程變成同步執(zhí)行后,就和從普通的方法中得到返回數(shù)據(jù)沒有什么區(qū)別了。因此,可以使用如下的代碼更有效地解決這個問題:

復制代碼 代碼如下:

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

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

二、通過回調函數(shù)返回數(shù)據(jù)
其實這種方法已經(jīng)在《向線程傳遞數(shù)據(jù)的三種方法》中介紹了。在《向線程傳遞數(shù)據(jù)的三種方法》一文的例子中通過Work類的process方法向線程中傳遞了計算結果,但同時,也通過process方法從線程中得到了三個隨機數(shù)。因此,這種方法既可以向線程中傳遞數(shù)據(jù),也可以從線程中獲得數(shù)據(jù)。

相關文章

  • EasyExcel實現(xiàn)讀寫Excel文件的示例代碼

    EasyExcel實現(xiàn)讀寫Excel文件的示例代碼

    EasyExcel是阿里巴巴開源的一個excel處理框架,以使用簡單、節(jié)省內存著稱。它可以在盡可能節(jié)約內存的情況下支持讀寫百M的Excel,所以本文就將利用它實現(xiàn)讀寫Excel文件,感興趣的可以了解一下
    2022-08-08
  • Spring Validator接口校驗與全局異常處理器

    Spring Validator接口校驗與全局異常處理器

    這篇文章主要介紹了Spring Validator接口校驗與全局異常處理器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • java發(fā)起http請求獲取返回的Json對象方法

    java發(fā)起http請求獲取返回的Json對象方法

    下面小編就為大家分享一篇java發(fā)起http請求獲取返回的Json對象方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • java?class?name實例深入精講

    java?class?name實例深入精講

    這篇文章主要為大家介紹了java?class?name實例深入精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • 一篇文章帶你了解XGBoost算法

    一篇文章帶你了解XGBoost算法

    XGBoost全名叫(eXtreme Gradient Boosting)極端梯度提升,經(jīng)常被用在一些比賽中,其效果顯著。它是大規(guī)模并行boosted tree的工具,它是目前最快最好的開源boosted tree工具包
    2021-08-08
  • Java多線程之讀寫鎖分離設計模式

    Java多線程之讀寫鎖分離設計模式

    這篇文章主要介紹了Java多線程讀寫鎖分離設計模式,主要利用Java到嗎完成read read 并行化、read write 不允許、write write 不允許幾項任務,需要的朋友可以參考一下
    2021-10-10
  • Java String類簡單用法實戰(zhàn)示例【字符串輸出、比較】

    Java String類簡單用法實戰(zhàn)示例【字符串輸出、比較】

    這篇文章主要介紹了Java String類簡單用法,結合具體實例形式分析了Java使用String類實現(xiàn)字符串的輸出和比較功能相關操作技巧,需要的朋友可以參考下
    2019-07-07
  • Redisson分布式鎖源碼解析

    Redisson分布式鎖源碼解析

    文章給大家分享了關于Redisson分布式鎖源碼相關的知識點內容,有興趣的朋友們可以參考學習下。
    2018-08-08
  • 淺析 ArrayList 和 LinkedList 有什么區(qū)別

    淺析 ArrayList 和 LinkedList 有什么區(qū)別

    ArrayList 和 LinkedList 有什么區(qū)別,是面試官非常喜歡問的一個問題。今天通過本文給大家詳細介紹下,感興趣的朋友跟隨小編一起看看吧
    2020-10-10
  • SpringBoot2.0集成MQTT消息推送功能實現(xiàn)

    SpringBoot2.0集成MQTT消息推送功能實現(xiàn)

    這篇文章主要介紹了SpringBoot2.0集成MQTT消息推送功能實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04

最新評論