啥都先不说,运行两段程序看看结果再分析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不存在多继承)