zoukankan      html  css  js  c++  java
  • Android开发笔记——线程的start和run方法

        线程在java开发中是一个很重要的概念,今天在写安卓程序时要添加线程,用到了run()、start()方法,一下子蒙了,把俩方法搞混淆了,印象中感觉效果是一样的,赶快往回查查书和之前学java基础时写过的程序才明白过来。

       之所以出现线程,就是为了更好的利用CPU,让她更加“精明”的干活。
    程序通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程,而如果直接用Run方法,这只是调用一个方法而已,程序中依然只有主线程--这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。 下面是一小段程序例子: public class TestThread1{ public static void main(String[] args){ Runner1 r=new Runner1(); //r.run();//这是方法调用,而不是开启一个线程 Thread t=new Thread(r);//调用了Thread(Runnable target)方法。且父类对象变量指向子类对象。 t.start(); for(int i=0;i<100;i++){ System.out.println("进入Main Thread运行状态"); System.out.println(i); } } } class Runner1 implements Runnable{ //实现了这个接口,jdk就知道这个类是一个线程 public void run(){ for(int i=0;i<100;i++){ System.out.println("进入Runner1运行状态"); System.out.println(i); } } }

        Thread对象的run()方法在一种循环下,使线程一直运行,直到不满足条件为止,在你的main()里创建并运行了一些线程,调用Thread类的start()方法将为线程执行特殊的初始化的过程,来配置线程,然后由线程执行机制调用run()。如果你不调用start()线程就不会启动。

        因为线程调度机制的行为是不确定的,所以每次运行该程序都会有不同的结果,你可以把你的循环次数增多些,然后看看执行的结果,你会发现main()的线程和Thread1是交替运行的。
        还有就是尽管线程的调度顺序是不固定的,但是如果有很多线程被阻塞等待运行,调度程序将会让优先级高的线程先执行,而优先级低的线程执行的频率会低一些。

        线程的启动是比较复杂的,需要为线程分配资源,它的START方法被调用时系统才会为线程分配资源。
        上面调用线程的run方法只能算普通的方法调用一样,得运行完run里面的代码整个程序才能往下进行,而如果调用start方法,线程和MAIN方法就会抢资源,打印的语句会交替出现,把线程里的循环次数加到300,试一下依次调run、start和两次都调start方法时所出现的情况应该能看出点端倪~~~

     
  • 相关阅读:
    【IDEA】创建Maven工程
    【Java】Input,Output,Stream I/O流 03 系统标准流 & 打印流
    【Java】Reflection 反射机制 03调用
    【Java】JDBC Part2 工具类封装实现
    【郝斌C ST】 指针入门
    【Java】Input,Output,Stream I/O流 02 文件流 & 缓冲流
    margin和padding的区别
    JAVA反射机制
    HTTP错误代码详细介绍
    关于Java继承问题
  • 原文地址:https://www.cnblogs.com/90zyh/p/2764412.html
Copyright © 2011-2022 走看看