继承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不存在多继承)

 

posted @ 2021-07-25 17:14  最终的赢家  阅读(33)  评论(0)    收藏  举报