zoukankan      html  css  js  c++  java
  • Thread的run方法和start方法的区别

    1
    线程的概念:线程的起动并不是简单的调用了RUN方法,而是由一个线程调度器来分别调用所有线程的RUN方法,
    我们普通的RUN方法如果没有执行完是不会返回的,也就是会一直执行下去,这样RUN方法下面的方法就不可能会执行了,可是线程里的RUN方法却不一样, 它只有一定的CPU时间,执行过后就给别的线程了,这样反复的把CPU的时间切来切去,因为切换的速度很快,所以我们就感觉是很多线程在同时运行一样.

    简单的调用run方法是没有这样效果的,所以必须调用Thread类的start方法来启动线程.所以启动线程有两种方法
    一是写一个类继承自Thread类,然后重写里面的run方法,用start方法启动线程
    二是写一个类实现Runnable接口,实现里面的run方法,用new Thread(Runnable target).start()方法来启动

    这两种方法都必须实现RUN方法,这样线程起动的时候,线程管理器好去调用RUN方法.

    2
    “老师给我们讲课的时候举过一个例子,就相当于玩游戏机,只有一个游戏机(cpu),可是有很多人要玩,于是,start是排队!等轮到你了,就run()了,当cpu的运行的时间片要到的时候,这个线程就继续排队,等待下一次的run()”

    “准确来说,不应该是排队,而应该是老师(JVM)看中谁

    另外还有一个状态,就是

    你玩的时候你老妈来叫你吃饭了,于是这个时候你就只好离开,老师继续找其他人来玩~那么你这个时候的状态叫做阻塞状态。
    当你吃饭玩了后又回来继续玩,这个时候你就又得重新让老师看中你。。。”

    3
    之所以出现线程,就是为了更好的利用CPU,让她更加“精明”的干活。

    通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。
    然后通过此Thread类调用方法run()来完成其运行操作的,
    这里方法run()称为线程体, 它包含了要执行的这个线程的内容,
    Run方法运行结束, 此线程终止, 而CPU再运行其它线程,

    而如果直接用Run方法,
    这只是调用一个方法而已,
    程序中依然只有主线程--这一个线程,
    其程序执行路径还是只有一条,
    这样就没有达到写线程的目的。

    记住:线程就是为了更好地利用CPU,
    提高程序运行速率的!

    class OneThread extends Thread {
    public void run(){
    }
    }
    public class MainApp {

       public static void main(String[] args){

             OneThread ot = new OneThread();

            //ot.run(); //就相当于调用一个ot中的方法,不会创建新的线程

     

          ot.start();//创建新的线程,并且调用run方法
        }
    }
     

  • 相关阅读:
    继承与 接口
    数组
    字符串加密
    类与对象
    java 方法学习
    课堂练习
    第一次课堂任务记录。整形数字相加合输出
    《大道至简》第二章 读后感
    大道至简第二章
    大道至简第一章
  • 原文地址:https://www.cnblogs.com/xmgh/p/3781822.html
Copyright © 2011-2022 走看看