溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中怎么使用Thread和Runnable創建線程

發布時間:2022-07-04 13:46:56 來源:億速云 閱讀:112 作者:iii 欄目:開發技術

這篇“Java中怎么使用Thread和Runnable創建線程”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java中怎么使用Thread和Runnable創建線程”文章吧。

    一、通過繼承Thread創建線程

    通過繼承Thread類,創建一個線程,在主線程中,調用start,讓線程處于runnable狀態,讓系統去運行線程的方法。

    public class MyThread extends Thread {
        @Override
        public void run() {
            System.out.println("執行線程");
        }
    }
    public class ThreadTest {
    
        public static void main(String[] args) {
            Thread thread = new MyThread();
            thread.start();
        }
    }

    二、實現Runnable創建檢查

    通過實現runnable接口,創建一個線程,需要把runnable的實現類,作為Thread的構造方法的參數,運行這個線程。

    public class MyThread implements Runnable {
        @Override
        public void run() {
            System.out.println("執行線程");
        }
    }
    
    public class ThreadTest {
        public static void main(String[] args) {
            Runnable thread = new MyThread();
            Thread thread1 = new Thread(thread);
            thread1.start();
    
        }
    }

    這里要注意一些,runnable的實現類,是沒有start()方法的,只有run()方法

    Java中怎么使用Thread和Runnable創建線程

    如果運行這個run方法,依然能運行線程的方法,但是,這個方法并不是在新的線程中運行的,而是在主線程中運行的。

    public class MyThread implements Runnable {
        @Override
        public void run() {
            System.out.println("此方法在:"+Thread.currentThread().getName()+"中運行");
        }
    }
    
    
    public class ThreadTest {
    
        public static void main(String[] args) {
            Runnable run = new MyThread();
            System.out.println("此方法在:"+Thread.currentThread().getName()+"中執行");
            run.run();
    //        Thread thread1 = new Thread(run);
    //        thread1.start();
    
        }
    }

    運行結果:

    Java中怎么使用Thread和Runnable創建線程

    如果把注釋打開,run()注釋掉,結果如下:

    Java中怎么使用Thread和Runnable創建線程

    三、比較兩種創建方式

    3.1、多繼承

    Java是不支持類的多繼承的,但是支持接口的多實現,所以Runnable在使用上更加靈活。

    3.2、 數據共享

    如果一個類繼承Thread,則不適合資源共享。但是如果實現了Runable接口的話,則很容易的實現資源共享。
    如果線程中有一個成員變量,使用Runnable創建的線程,多個線程之間可以共同訪問這個變量,而Thread不可以。

    Java中怎么使用Thread和Runnable創建線程

    為什么呢?一個Thread創建的線程,每次都是new的一個新的線程對象,線程對象之間的成員變量不共享。而Runnale,可以作為Thread類的參數,可以多創建幾個Thread類,把Runnale作為參數,讓多個線程一起運行。

    public class ThreadTest {
    
        public static void main(String[] args) {
            Runnable run = new MyThread();
            Thread thread1 = new Thread(run);
            Thread thread2 = new Thread(run);
            Thread thread3 = new Thread(run);
            thread1.start();
            thread2.start();
            thread3.start();
        }
    }

    3.3、線程池

    線程池只能放入實現Runable或callable類線程,不能直接放入繼承Thread的類。

    Java中怎么使用Thread和Runnable創建線程

    四、源碼分析

    當我們進入Thread方法,可以看的Thread也實現了Runnable接口

    Java中怎么使用Thread和Runnable創建線程

    使用Thread肯定也實現了他的run方法。

    Java中怎么使用Thread和Runnable創建線程

    可以看出,在這個run方法中,如果target不為空,執行target的run方法,那target是什么?

    Java中怎么使用Thread和Runnable創建線程

    進入后,發現是runnable接口,那它是如何初始化的?突然想起,執行runnable的實現類時,都會把他通過構造函數傳遞,那來看看構造函數。

    Java中怎么使用Thread和Runnable創建線程

    繼續往下,可以看出確實是在這里初始化的。

    Java中怎么使用Thread和Runnable創建線程

    所以,Runnbale接口的run方法,是通過Thread的成員變量去執行的。

    以上就是關于“Java中怎么使用Thread和Runnable創建線程”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女