Thread和Runable比较

匿名 (未验证) 提交于 2019-12-02 23:34:01

大多数情况下,不考虑代码书写方式,这两个都是可以实现多线程功能的。所以他们的区别并不是性能上 功能上的区别,而是书写方式,代码可维护性,松耦合性 以及操作方便等方便的区别了。

1. 最直接的区别就是Runable是接口,是支持多继承的,也就是实现类也可以实现其他的接口,降低了耦合。而Tread是类,只能被单一继承,这样它的子类不能再继承其他类了,增加了耦合性。

2. Runable书写更加方便,只需要实现一个run方法即可,甚至不需要新建子类,直接在方法中定义匿名实现类即可。Thread书写更加复杂,要新建子类,实现start() ,构造方法等。

3. Runable共享变量时更加方便,可以使共享的变量和线程代码及线程的创建相分离,更好的达到低耦合效果,也可以更好的控制共享变量的同步问题。

示例:

代码引用自:https://www.cnblogs.com/yangdy/p/5274455.html

Tread方式实现多线程,并访问变量,不好做共享

 public class Main {      public static void main(String[] args) {         MyThread T1 = new MyThread("A");         MyThread T2 = new MyThread("B");         T1.start();         T2.start();       }  }   class MyThread extends Thread {     private String name;     public MyThread(String name) {         this.name = name;     }          @Override     public void run() {         for (int i = 0; i < 5; i++) {             System.out.println(name+":"+i);             try {                 sleep(1000); //休眠1秒,避免太快导致看不到同时执行             } catch (InterruptedException e) {                 e.printStackTrace();             }         }              } }

Runable方式实现多线程,并共享变量

 public class Main {      public static void main(String[] args) {          //测试Runnable         MyThread1 t1 = new MyThread1();         new Thread(t1).start();//同一个t1,如果在Thread中就不行,会报错         new Thread(t1).start();         new Thread(t1).start();      }  } class MyThread1 implements Runnable{     private int ticket = 10;     @Override     //记得要资源公共,要在run方法之前加上synchronized关键字,要不然会出现抢资源的情况     public synchronized  void  run() {         for (int i = 0; i <10; i++) {             if (this.ticket>0) {                 System.out.println("卖票:ticket"+this.ticket--);             }         }              }      }

一般推荐使用Runable方式

文章来源: https://blog.csdn.net/aHardDreamer/article/details/90344396
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!