啥都先不說,運行兩段程序看看結果再分析java
實現Runnable接口的程序代碼ide
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(); } }
運行結果:spa
線程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(); } }
運行結果:code
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對象的資源。blog
繼承Thread類,三個線程都是獨立的運行,線程間不共享資源。繼承
因此能夠總結出如下區別:接口
1.Runnable接口的話,能夠避免單繼承的侷限性,具備較強的健壯性。資源
2.Runnable能夠實現資源的共享,同時處理同一資源。
3.Thread類的線程間都是獨立運行的,資源不共享。
4.繼承Thread類再也不被其餘類繼承(java不存在多繼承)