继承Thread的实现Runnable的区别
继承Thread类实现方式
1 public class ThreadTest1 extends Thread{ 2 3 private int num = 10; 4 5 @Override 6 public void run() { 7 8 for(int i =0; i <=100; i++) { 9 if(num >0) { 10 System.out.println(Thread.currentThread().getName()+"执行结果:"+(num--)); 11 } 12 } 13 } 14 15 public static void main(String[] args) { 16 ThreadTest1 t01 = new ThreadTest1(); 17 ThreadTest1 t02 = new ThreadTest1(); 18 ThreadTest1 t03 = new ThreadTest1(); 19 t01.start(); 20 t02.start(); 21 t03.start(); 22 } 23 }
运行结果
Thread-2执行结果:10
Thread-2执行结果:9
Thread-2执行结果:8
Thread-2执行结果:7
Thread-2执行结果:6
Thread-2执行结果:5
Thread-2执行结果:4
Thread-2执行结果:3
Thread-2执行结果:2
Thread-2执行结果:1
Thread-0执行结果:10
Thread-0执行结果:9
Thread-1执行结果:10
Thread-0执行结果:8
Thread-1执行结果:9
Thread-0执行结果:7
Thread-1执行结果:8
Thread-0执行结果:6
Thread-1执行结果:7
Thread-1执行结果:6
Thread-0执行结果:5
Thread-1执行结果:5
Thread-0执行结果:4
Thread-1执行结果:4
Thread-0执行结果:3
Thread-1执行结果:3
Thread-0执行结果:2
Thread-1执行结果:2
Thread-0执行结果:1
Thread-1执行结果:1
这种方式实现所有的线程的资源都是独立的,资源不会共享
下面我们来看一下实现Runnable接口的方式效果
1 public class ThreadTest2 implements Runnable { 2 3 private int num = 10; 4 5 @Override 6 public void run() { 7 for (int i = 0; i <= 100; i++) { 8 if (num > 0) { 9 System.out.println(Thread.currentThread().getName()+"执行结果:" + (num--)); 10 } 11 } 12 13 } 14 15 public static void main(String[] args) { 16 ThreadTest2 t1 = new ThreadTest2(); 17 18 Thread t01 = new Thread(t1, "线程1"); 19 Thread t02 = new Thread(t1, "线程2"); 20 Thread t03 = new Thread(t1, "线程3"); 21 22 t01.start(); 23 t02.start(); 24 t03.start(); 25 } 26 }
运行结果
线程3执行结果:10
线程3执行结果:9
线程3执行结果:8
线程3执行结果:7
线程3执行结果:6
线程3执行结果:5
线程3执行结果:4
线程3执行结果:3
线程3执行结果:2
线程3执行结果:1
实现Runnable方式的资源是共享的
总结:
1.Runnable接口的话,可以避免单继承的局限性,具有较强的健壮性。
2.Runnable可以实现资源的共享,同时处理同一资源。
3.Thread类的线程间都是独立运行的,资源不共享。
4.继承Thread类不再被其他类继承(java不存在多继承)

浙公网安备 33010602011771号