欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

結(jié)果

講解

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),其實每次的結(jié)果可能會不太一樣。

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

總結(jié)

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

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

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

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

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

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

相關文章

  • 詳解Spring Boot使用redis實現(xiàn)數(shù)據(jù)緩存

    詳解Spring Boot使用redis實現(xiàn)數(shù)據(jù)緩存

    本篇文章主要介紹了詳解Spring Boot使用redis實現(xiàn)數(shù)據(jù)緩存,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • java接口返回參數(shù)按照請求參數(shù)進行排序方式

    java接口返回參數(shù)按照請求參數(shù)進行排序方式

    這篇文章主要介紹了java接口返回參數(shù)按照請求參數(shù)進行排序方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java實現(xiàn)郵件發(fā)送遇到的問題

    Java實現(xiàn)郵件發(fā)送遇到的問題

    本文給大家分享的是個人在項目過程中,使用Java實現(xiàn)郵件發(fā)送的時候所遇到的幾個問題以及解決方法,有需要的小伙伴可以參考下
    2016-09-09
  • Java如何輸出windows中的全部漢字

    Java如何輸出windows中的全部漢字

    這篇文章主要介紹了Java如何輸出windows中的全部漢字問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • mac下idea啟動web項目報錯java.net.SocketException:socket closed問題

    mac下idea啟動web項目報錯java.net.SocketException:socket closed

    本文主要介紹了作者在項目啟動時遇到的一個問題——無法打開調(diào)試端口,經(jīng)過一系列排查和嘗試,最終發(fā)現(xiàn)是由于權限問題導致的,作者還分享了如何修改文件權限的方法,并提醒大家不要隨意kill掉占用端口的進程
    2024-12-12
  • Mybatis返回map集合時,列的順序與select不一致問題

    Mybatis返回map集合時,列的順序與select不一致問題

    這篇文章主要介紹了Mybatis返回map集合時,列的順序與select不一致問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java微信支付之服務號支付代碼示例

    Java微信支付之服務號支付代碼示例

    這篇文章主要介紹了Java微信支付之服務號支付代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java 數(shù)據(jù)庫連接池c3p0 介紹

    Java 數(shù)據(jù)庫連接池c3p0 介紹

    這篇文章主要介給大家分享了 Java 數(shù)據(jù)庫連接池c3p0 介紹,c3p0 是一個成熟的、高并發(fā)的 JDBC 連接池庫,支持緩存和 PreparedStatements 的重用。它以LGPL v.2.1或EPL v.1.0授權,下面我們就一起來看看文章內(nèi)容的詳細介紹吧,需要的朋友也可以參考一下
    2021-11-11
  • Spring Boot示例代碼整合Redis詳解

    Spring Boot示例代碼整合Redis詳解

    SpringBoot對常用的數(shù)據(jù)庫支持外,對NoSQL 數(shù)據(jù)庫也進行了封裝自動化,下面這篇文章主要給大家介紹了關于springboot使用redis的詳細步驟,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • 淺談Hibernate n+1問題

    淺談Hibernate n+1問題

    這篇文章主要介紹了淺談Hibernate n+1問題,怎么解決n+1問題,文中也作了簡要分析,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02

最新評論