最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA多線程進階方式(Runnable接口的講解和運用)

 更新時間:2024年01月16日 10:36:19   作者:德欽  
這篇文章主要介紹了JAVA多線程進階方式(Runnable接口的講解和運用),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

JAVA多線程

到目前為止,線程都是通過擴展Thread類來創(chuàng)建的,如果程序員需要繼承其他類(非Thread類),而且還要使用當前類實現(xiàn)多線程,那么可以通過Runnable接口來進行實現(xiàn)。

感謝借鑒,給予了我很大的學習。這里寫鏈接內(nèi)容

具體語法是:

public class Thread extends Object implements Runnable

使用Runnable 接口

啟動新的線程的步驟如下:

  • 1.建立Runnable 對象
  • 2.使用參數(shù)為Runnable 對象的構造方法進行創(chuàng)建Thread 實例
  • 3.調(diào)用start()方法啟動線程

Runnable

接口應該是有哪些打算通過某一個線程執(zhí)行其中實例的類進行實現(xiàn),類必須定義一個稱為run的無參方法。

Thread (Runnable target)

創(chuàng)建線程第二種方式

實現(xiàn)Runnable 接口

1.定義類實現(xiàn)Runnable 接口

2. 覆蓋Runnable 接口中的run方法(將線程要運行的代碼存放在該run方法中)

3. 通過Thread 類建立線程對象

4.將Runnale接口的子類對象作為實際的參數(shù)傳遞給Thread 類的構造函數(shù)(為什么要Runnable 接口的自欸對象傳遞給Thread的子類對象,所以要讓線程去指定對象的run方法,就必須明確該run方法所屬的對象)

5.調(diào)用Thread 類的start方法開啟線程并且調(diào)用Runnable 接口的子類的run 方法。

  • 此應用程序公共類有一個double型類屬性(變量)x,初始值為0;
  • 在應用程序主進程中新開兩個線程,這兩個線程都進行死循環(huán);
  • 第1個線程每隔300ms激活一次,令類屬性x自加1.0并輸出顯示;
  • 第2個線程每隔400ms激活一次,令類屬性x自加0.1并輸出顯示。
public class tiaozhan4 {
    static double x=0; //定義一個浮點型變量并賦值
    public static void main(String[] args){
        Thread a=new Thread(new ACThread());//創(chuàng)建一個新的線程
        Thread b=new Thread(new BCThread());//創(chuàng)建一個新的線程
        System.out.println("初值:"+x);//顯示x初值是0
        a.start();
        b.start();
    }
 public static class ACThread implements Runnable{
    public void run(){
        try{
        while(true){
            Thread.sleep(300);
            x+=1;
            System.out.println("線程1="+x);
            }
        }
            catch(InterruptedException e){
            }
        }
    }
public static class BCThread implements Runnable{
    public void run(){
        try{
        while(true){
                Thread.sleep(400);
                x+=0.1;
                System.out.println("線程2="+x);
            }
        }
            catch(InterruptedException e){
            }
        }
    }
}

結果

講解

public class tiaozhan4 {
    static double x=0; //定義一個浮點型變量并賦值
    public static void main(String[] args){
        Thread a=new Thread(new ACThread());//創(chuàng)建一個新的線程
        Thread b=new Thread(new BCThread());//創(chuàng)建一個新的線程
        System.out.println("初值:"+x);//初值為0
        a.start();
        b.start();
    }

這里我們可以看到,}只有一個 說明,下面的我們寫的Runnable 接口類是包含在public class 里里面的,故在下面的函數(shù)名書寫中,我嘗試了寫出class 文件名的方式,但是系統(tǒng)發(fā)送報錯,我改為public static void 文件名是才可以運行。

這一點我們需要注意,這是和Thread 類的不一樣的一點。

由于我們要在主函數(shù)的基礎上,新開兩個線程,所以我們在這里創(chuàng)建了兩個線程,并且start 開始運行run 部分兩次。

public static class ACThread implements Runnable{
    public void run(){
        try{
        while(true){
            Thread.sleep(300);
            x+=1;
            System.out.println("線程1="+x);
            }
        }
            catch(InterruptedException e){
            }
        }
    }
public static class BCThread implements Runnable{
    public void run(){
        try{
        while(true){
                Thread.sleep(400);
                x+=0.1;
                System.out.println("線程2="+x);
            }
        }
            catch(InterruptedException e){
            }
        }
    }
}

這里就是按著文章的要求寫出該方法即可。

值得注意的是,用到啊了時間間隔Thread.sleep 時,需要進行JAVA異常捕捉機制的書寫。

我們在輸出的時候去注明線程1和線程2,這樣子在輸出的時候可以便于觀察JAVA 虛擬機是如何將這兩個線程進行分配運行的。

注意

其實,我們多運行幾次就可以發(fā)現(xiàn),其實每次的結果可能會不太一樣。

因為虛擬機的運行,可能先開始執(zhí)行了線程1,當線程1已經(jīng)10或者12的時候,這時候才開始執(zhí)行線程2,所以這就是剛開的時候全是整數(shù),后面逐漸多出來小數(shù)的原因。

總結

實現(xiàn)的方式和繼承的方法有什么區(qū)別?

實現(xiàn)的方式好處是避免了單繼承的局限性。

在定義線程的時候,建立使用實現(xiàn)的方式。

兩種方式的區(qū)別:繼承Thread :線程代碼存放Thread 子類 run方法中。

線程代碼存在接口的子類的run方法。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關文章

  • maven多個倉庫查詢的優(yōu)先級順序案例講解

    maven多個倉庫查詢的優(yōu)先級順序案例講解

    這篇文章主要介紹了maven多個倉庫查詢的優(yōu)先級順序,考慮到我們常用的配置文件是conf/settings.xml和工程里面的pom.xml文件,我們針對這兩個文件的結合來分析倉庫的使用順序,需要的朋友可以參考下
    2023-04-04
  • Java多線程之定時器Timer的實現(xiàn)

    Java多線程之定時器Timer的實現(xiàn)

    這篇文章主要為大家詳細介紹了Java多線程中定時器Timer類的使用以及模擬實現(xiàn),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-10-10
  • java多線程實現(xiàn)文件下載

    java多線程實現(xiàn)文件下載

    這篇文章主要為大家詳細介紹了java多線程實現(xiàn)文件下載,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • java 中冒泡、二分、快速算法詳解

    java 中冒泡、二分、快速算法詳解

    這篇文章主要介紹了java 中冒泡、二分、快速算法詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • Java超詳細分析講解哈希表

    Java超詳細分析講解哈希表

    哈希表是一種根據(jù)關鍵碼去尋找值的數(shù)據(jù)映射結構,該結構通過把關鍵碼映射的位置去尋找存放值的地方,說起來可能感覺有點復雜,我想我舉個例子你就會明白了,最典型的的例子就是字典
    2022-06-06
  • java正則替換img標簽中src值的方法

    java正則替換img標簽中src值的方法

    今天小編就為大家分享一篇java正則替換img標簽中src值的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Java中的static靜態(tài)代碼塊的使用詳解

    Java中的static靜態(tài)代碼塊的使用詳解

    本篇文章介紹了,Java中的static靜態(tài)代碼塊的使用詳解。需要的朋友參考下
    2013-04-04
  • SpringBoot整合數(shù)據(jù)庫訪問層的實戰(zhàn)

    SpringBoot整合數(shù)據(jù)庫訪問層的實戰(zhàn)

    本文主要介紹了SpringBoot整合數(shù)據(jù)庫訪問層的實戰(zhàn),主要包含JdbcTemplate和mybatis框架的整合應用,具有一定的參考價值,感興趣的可以了解一下
    2022-03-03
  • java實現(xiàn)一個簡單TCPSocket聊天室功能分享

    java實現(xiàn)一個簡單TCPSocket聊天室功能分享

    這篇文章主要為大家分享了java實現(xiàn)的一個簡單TCPSocket聊天室功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • java如何接收和發(fā)送ASCII數(shù)據(jù)

    java如何接收和發(fā)送ASCII數(shù)據(jù)

    這篇文章主要介紹了java如何接收和發(fā)送ASCII數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評論

额尔古纳市| 揭东县| 文安县| 株洲县| 攀枝花市| 民丰县| 始兴县| 康保县| 青浦区| 谢通门县| 台中县| 安化县| 永宁县| 金门县| 屯门区| 徐州市| 江永县| 肇东市| 全南县| 大冶市| 玛沁县| 浦北县| 新和县| 聂荣县| 美姑县| 尼勒克县| 甘南县| 容城县| 柳州市| 衡东县| 门头沟区| 佛山市| 墨玉县| 南康市| 保定市| 常宁市| 江油市| 东丽区| 清水县| 天祝| 龙游县|