zoukankan      html  css  js  c++  java
  • Thread类和Runnable接口的比较

    Thread和Runnable的联系

    Thread类的定义:

    1 public class Thread extends Object implements Runnable

    联系:从Thread类的定义可以看到,Thread类实现了Runnable接口,即可以说ThreadRunnable的子类。

    Thread和Runnable的区别

    观察以下程序(程序1):

     1 public class MyThread extends Thread{
     2     private int ticket = 5;
     3     public MyThread(String name){
     4         this.setName(name);
     5     }
     6     @Override
     7     public void run() {    //线程的操作主题
     8         for (int i = 0; i < 100; i++) {
     9             if(ticket>0){
    10                 System.out.println(Thread.currentThread().getName()+"卖出一张:还剩"+ticket--+"张票");
    11             }
    12         }
    13     }
    14     
    15     public static void main(String args[]){
    16         MyThread my1 = new MyThread("售票机1");  //实例化对象
    17         MyThread my2 = new MyThread("售票机2");  //实例化对象
    18         my1.start();
    19         my2.start();
    20     }
    21 }

    通过继承Thread类实现的多线程操作,两个售票机虽然是并发运行,但结果显然不是我们想要的,两个售票机各自售出各自的五张票,共卖出10张票,但我们只有五张票。

    再看实现Runnable接口创建线程(程序2):

     1 public class MyThread implements Runnable{
     2     private int ticket = 5;
     3     @Override
     4     public void run() {    //线程的操作主题
     5         for (int i = 0; i < 100; i++) {
     6             if(ticket>0){
     7                 System.out.println(Thread.currentThread().getName()+"卖出一张:还剩"+ticket--+"张票");
     8             }
     9         }    
    10     }
    11     public static void main(String args[]){
    12         MyThread my1 = new MyThread();  //实例化对象
    13         new Thread(my1,"售票机1").start();       //调用线程主体
    14         new Thread(my1,"售票机2").start();       //调用线程主体
    15     }
    16 }

    从运行结果来看,虽然我们启动了两个线程,但是两个线程总共卖出了5张票,所以达到了资源共享。

    区别:使用Thread类在操作多线程的时候无法实现资源共享的目的,而使用Runnable接口实现的多线程可以实现资源共享。

    总结

    实现Runnable接口比继承Thread类的明显优点:

    • 适合多个相同代码的线程去处理同一个资源;
    • 可以避免由于单继承局限所带来的影响;
    • 增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。

     

  • 相关阅读:
    使用LR编写windows sockets协议xml报文格式脚本实战
    使用LR编写HTTP协议Json报文格式接口脚本实战
    web类协议脚本-飞机订票系统示例
    使用LR编写下载类脚本
    python算法-选择排序
    python算法-冒泡排序
    用户在浏览器中输入一个url发生的奥秘
    浅谈cookie和session
    selenium加载配置参数,让chrome浏览器不出现‘Chrome正在受到自动软件的控制’的提示语,以及后台静默模式启动自动化测试,不占用桌面的方法
    Python之文件和目录操作
  • 原文地址:https://www.cnblogs.com/mzct123/p/8283619.html
Copyright © 2011-2022 走看看