android-Thread的run方法和start方法

http://blog.csdn.net/zhou6162/article/details/7108187
解说的很精辟,学习一下: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方法
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章