zoukankan      html  css  js  c++  java
  • java Thread和Runable的深刻理解

    线程(Thread)是指程序的运行流程,多线程机制指同时运行多个程序块。

    Java中实现多线程有两种方法:继承Thread类;实现Runnable接口。

    Thread类的run()方法的制定者:接口Runnable中的run();
    在Thread类中没有完全实现Runnable接口中的run()方法。
    Thread类是Runnable接口的子类,Thread类中的run()方法调用的是Runnable接口中的run()方法。

    接口是由全局变量和公共抽象方法所组成的。
    所以,在Thread子类中,必须覆写Thread类中的run()方法。

    启动线程时,不能直接调用run()方法,而是调用从Thread类中继承而来的start()方法。

    如果一个类继承了Thread类,那么只能调用一次start()方法,如果多次调用,
    将会出现“IllegalThreadStateException”异常。

    Runnable接口中只有一个方法:run();

    Runnable、Thread中的run方法和自定义的run方法之间的关系:
    interface Runnable{                //Runable接口的定义
        public abstract void run();
    }                          //remove method body

    public class Thread implements Runnable {    //Thread类的部分定义
       private Runnable target; //封装
       public Thread(Runnable target){ //构造函数
          init(target);
       }
       private void init(Runnable target2) { //检验关口,给属性赋值
          this.target = target;
       }
       public void run() {
          if(target != null){
            target.run();           //此run方法指的是自定义的run方法,即Runable中的run方法
                             //整个过程中,只有一个对象,只有这个对象有能力调用自定
                             //义的run方法。
          }
       }
    }


    class MyThread implements Runnable{      
      public void run() {                 //自定义的run方法

      }
    }

    由于使用Runable的整个过程中,只产生一个对象,所以可以方便地实现资源的共享。
    这也是Runable优于Thread之处。

  • 相关阅读:
    POJ 3680_Intervals
    POJ 3680_Intervals
    POJ 3686_The Windy's
    POJ 3686_The Windy's
    Codeforces 629C Famil Door and Brackets
    Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)
    Codeforces 629D Babaei and Birthday Cake(线段树优化dp)
    Codeforces 628F Bear and Fair Set
    18.04.26 魔兽世界终极版
    18.4.20 STL专项练习8选6
  • 原文地址:https://www.cnblogs.com/XuGuobao/p/6545300.html
Copyright © 2011-2022 走看看