1. 程式人生 > >線程的實現方式二

線程的實現方式二

-s 創建 .get ++ 有一個 構造 線程 pub 只有一個

線程實現方式二:

    1.自定義一個類實現runnable接口

        class Thread implements Runnable

        查看源代碼,我們可以知道Thread實現了runnable接口

        runnable中只有一個run抽象類

    2.實現run方法,把自定義線程的任務定義在run方法裏面

    3.創建一個runnable實現類對象

    4.創建Thread方法,並把runnable實現類對象作為實參傳過去

        Thread的構造方法:

            Thread(Runnable target)        分配新的 Thread

對象。

            Thread(Runnable target ,String name) 分配新的 Thread 對象並這個可以給線程一個名字

    5.並用Thread方法的start方法開啟一個線程線程

        start方法不是靜態的,要實例化對象

    疑問1:runnable的實現類是線程類嗎?

        不是,只有Thread和Thread的子類才是線程對象

        rannable的實現類只是是實現了rannable接口的對象而已

    疑問2:為什麽我們調用Thread的start方法可以執行runnable接口的實現類的run方法呢?

        源代碼如下:

Thread類的構造方法
    public Thread(Runnable target, String name) {
        init(null, target, name, 0);
    }
    Thread類的run方法
    public void run() {
        if (target != null) {
            target.run();
        }
    }
    Thread類的target成員變量
    private Runnable target;

      原來,然後當我們調用Thread的start方法的時候,就調用了Thread的run方法,

      而我們傳遞一個runnable實現類的對象,然後Thread的run方法會調用runnable實現類的run方法

下面是實現runnable接口的實例代碼: 

public class Demo7 implements Runnable {
    
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            System.out.println(Thread.currentThread().getName()+i);
        }
        
    }
    public static void main(String[] args) {
        Demo7 demo = new Demo7();
        Thread thread = new Thread(demo,"狗娃");
        thread.run();
        thread.start();
        for (int i = 0; i < 50; i++) {
            System.out.println(Thread.currentThread().getName()+i);
        }
    }
    
    
}

線程的實現方式二