zoukankan      html  css  js  c++  java
  • Thread和Runable比较

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

    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方式

  • 相关阅读:
    高通、猎户机型Android典型bootloader分析
    Ubuntu 14.04 中安装 VMware10 Tools工具
    Linux内核中的GPIO系统之(3):pin controller driver代码分析
    linux内核中的GPIO系统之(2):pin control subsystem
    linux内核中的GPIO系统之(1):软件框架
    WINCE6.0组件选择说明
    看看,这就是微软的“万物互联”系统 window10 IOT
    高通平台 lcd driver 调试小结
    STM8S定时器工作
    开关笔记
  • 原文地址:https://www.cnblogs.com/cnsec/p/13407139.html
Copyright © 2011-2022 走看看