實現Runnable和繼承Thread的區別


啥都先不說,運行兩段程序看看結果再分析

實現Runnable接口的程序代碼

public class ThreadTest1 implements Runnable {

    private int num = 10;

    @Override
    public void run() {
        for (int i = 0; i <= 100; i++) {
            if (num > 0) {
                System.out.println(Thread.currentThread().getName()+"執行結果:" + (num--));
            }
        }

    }

    public static void main(String[] args) {
        ThreadTest1 t1 = new ThreadTest1();

        Thread t01 = new Thread(t1, "線程1");
        Thread t02 = new Thread(t1, "線程2");
        Thread t03 = new Thread(t1, "線程3");

        t01.start();
        t02.start();
        t03.start();
    }
}

運行結果:

線程2執行結果:9
線程3執行結果:8
線程3執行結果:6
線程1執行結果:10
線程3執行結果:5
線程2執行結果:7
線程3執行結果:3
線程3執行結果:1
線程1執行結果:4
線程2執行結果:2

繼承Thread類的實現代碼

public class ThreadTest2 extends Thread{
    
    private int num = 10;

    @Override
    public void run() {
        
        for(int i =0; i <=100; i++) {
            if(num >0) {
                System.out.println(Thread.currentThread().getName()+"執行結果:"+(num--));
            }
        }        
    }
    
    public static void main(String[] args) {
        ThreadTest2 t01 = new ThreadTest2();
        ThreadTest2 t02 = new ThreadTest2();
        ThreadTest2 t03 = new ThreadTest2();
        t01.start();
        t02.start();
        t03.start(); 
    }
}

運行結果:

Thread-0執行結果:10
Thread-0執行結果:9
Thread-0執行結果:8
Thread-0執行結果:7
Thread-0執行結果:6
Thread-0執行結果:5
Thread-0執行結果:4
Thread-0執行結果:3
Thread-0執行結果:2
Thread-0執行結果:1
Thread-1執行結果:10
Thread-1執行結果:9
Thread-1執行結果:8
Thread-1執行結果:7
Thread-1執行結果:6
Thread-1執行結果:5
Thread-1執行結果:4
Thread-1執行結果:3
Thread-2執行結果:10
Thread-2執行結果:9
Thread-2執行結果:8
Thread-1執行結果:2
Thread-2執行結果:7
Thread-1執行結果:1
Thread-2執行結果:6
Thread-2執行結果:5
Thread-2執行結果:4
Thread-2執行結果:3
Thread-2執行結果:2
Thread-2執行結果:1

從上面的運行結果可以看出,兩者的區別。

實現Runnable接口的,對於三個線程來說共享的是ThreadTest1對象的資源。

繼承Thread類,三個線程都是獨立的運行,線程間不共享資源。

所以可以總結出以下區別:

1.Runnable接口的話,可以避免單繼承的局限性,具有較強的健壯性。

2.Runnable可以實現資源的共享,同時處理同一資源。

3.Thread類的線程間都是獨立運行的,資源不共享。

4.繼承Thread類不再被其他類繼承(java不存在多繼承)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM