`
lyy3323
  • 浏览: 85958 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java中Thread线程中的 start()和run()方法的区别(2)——

阅读更多
java中Thread线程中的 start()和run()方法的区别(2)——实例
2009-02-10 12:38例:
class NewThread implements Runnable {
    Thread t;
    public NewThread() {
      t = new Thread(this,"Demo thread");
        System.out.println("Child thread : " + t);
         t.run();
    }
    public void run(){
        try{
            for( int i = 5; i > 0; i --){
            System.out.println("Child thread :" + i);
            Thread.sleep(500);
            }

        }catch(InterruptedException e){
       System.out.println("Child interrupted.");
        }
      System.out.println("Exiting child thread.");

    }
}

public class TestDemo{
    public static void main(String args[]){
         new NewThread();
         try{
         for( int i = 5; i > 0; i --){
            System.out.println("Main thread :" + i);
            Thread.sleep(1000);
            }
        }catch(InterruptedException e){
        System.out.println("Main interrupted.");
        }
        System.out.println("Exiting Main thread.");
    }
}

    这是一个实现多线程的程序,运行结果如下:
    Child thread : Thread[Demo thread,5,main]
    Main thread :5
    Child thread :5
    Child thread :4
    Main thread :4
    Child thread :3
    Child thread :2
    Main thread :3
    Child thread :1
    Exiting child thread.
    Main thread :2
    Main thread :1
    Exiting Main thread.

    试想,如果把 start()改成run()会出现什么结果?
    修改之后运行结果:
    Child thread : Thread[Demo thread,5,main]
    Child thread :5
    Child thread :4
    Child thread :3
    Child thread :2
    Child thread :1
    Exiting child thread.
    Main thread :5
    Main thread :4
    Main thread :3
    Main thread :2
    Main thread :1
    Exiting Main thread.
    程序运行成为了单线程顺序执行。为什么?
    start方法:用来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体, 它包含了要执行的这个线程的内容, run方法运行结束, 此线程终止, 而CPU再运行其它线程,
    直接用run方法: 这只是调用一个方法而已, 程序中依然只有主线程--这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。
    记住:线程就是为了更好地利用CPU,提高程序运行速率的!

分享到:
评论
1 楼 cicl 2011-10-12  
朋友,正文第8行应该是 t.start();吧,呵呵

相关推荐

    Java多线程——Thread类中run()方法和start()方法的区别.docx

    通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到spu时间片,就开始执行run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行...

    java中thread线程start和run的区别

    主要介绍了java中thread线程start和run的区别,run()是Runnable接口中定义的一个方法,是为了让客户程序员在这个方法里写自己的功能代码的。直接调用和普通的类调用自己的成员方法是没有任何区别的

    java多线程设计模式详解(PDF及源码)

    单线程程序 多线程程序 Thread类的run方法和start方法 线程的启动 线程的启动(1)——利用Thread类的子类 线程的启动(2)——利用Runnable接口 线程的暂时停止 线程的共享互斥 synchronized方法 synchronized阻挡 ...

    Java Thread 的 run() 与 start() 的区别.docx

    2) run: run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就...

    Thread实现多线程

    继承Thread类: 1必须重写run 方法:里面放置的实际的线程体 2 启动线程: 3创建Thread对象 4调用Thread对象的start 方法启动线程

    java多线程示例

    Java中的多线程有三种实现方式: 1.继承Thread类,重写run方法。Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯一方法就是通过Thread类的start方法。 2.实现Runnable接口,并...

    Android:Handler的post()方法和Thread的start()方法执行Thread的run()方法的区别

    * 在java中真正开启线程的方法是这样的。 */ Thread t = new Thread(r); t.start(); setContentView(R.layout.activity_main); System.out.println("Activity-->"+ Thread.currentThread().getId()...

    Thread中start()和run()的区别_动力节点Java学院整理

    start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。 run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动...

    java基本教程之Thread中start()和run()的区别 java多线程教程

    主要介绍了Thread中start()和run()的区别,Thread类包含start()和run()方法,它们的区别是什么?下面将对此作出解答

    Java Thread中start()和run()的区别_动力节点Java学院整理

    start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。而run() : run()就和普通的...下面通过示例代码给大家介绍了Java Thread中start()和run()的区别,感兴趣的朋友一起看看吧

    Java线程面试题大全.docx

    5. Thread 类中的 start () 和 run () 方法有什么区别? 6. Java 中 Runnable 和 Callable 有什么不同? 7. Java 中 CyclicBarrier 和 CountDownLatch 有什么不同? 8. Java 内存模型是什么? 9. Java 中的 volatile...

    java多线程之赛马程序实验8多线程练习下载进度

    运用多线程技术,练习Thread类得run方法和start方法。运用进度条显式表示下载进度。java多线程之赛马程序

    基础深化和提高-Java多线程技术

    继承Thread类:创建一个类继承自java.lang.Thread类,并重写run()方法来定义线程的执行逻辑。然后可以创建该类的实例并调用start()方法启动线程。 java class MyThread extends Thread { public void run() { // ...

    如何使用Java编写多线程程序

    在使用java创建线程的时候,你可以生成一个Thread类或者他的子类对象,并给这个对象发送start()消息(程序可以向任何一个派生自 Runnable 接口的类对象发送 start() 消息的),这样一来程序会一直执行,直到run返回...

    Android 线程thread的两种实现方法(必看)

    这篇文章中有三点需要提前说明一下, 一:在android中有两种实现线程thread的方法: 一种是,扩展java.lang.Thread...下面分别给出两种线程的实现方法,其一,扩展java.lang.Thread类,也就是把run()方法写到线程里面:

    java用线程两种方式

    * 继承Thread:线程代码存放Thread子类run方法中 实现 * Runnable:线程代码存放接口的子类的run方法 * wait释放资源,释放锁 * sleep释放资源,不释放锁 */ @SuppressWarnings("all") public class Thread1 { ...

    java多线程机制 -- 源码详解

    在上述例子2中,我们在小程序这个主线程中用构造方法Thread(this)创建了一个新的线程。This代表着小程序作为这个新的线程的目标对象,因此我们的小程序必须为这个新创建的线程实现Runnable接口,即小程序利用...

    创建线程的三种方式(Thread、Runnable、Callable).docx

    1. 在Java中负责实现线程功能的类是java.lang.Thread 类。 2. 可以通过创建 Thread的实例来创建新的线程。 3. 每个线程都是通过某个特定的Thread对象所对应的方法run( )来完成其操作的,方法run( )称为线程体。 4. ...

    【java面试题】综合性经典Java面试题

    Thread类的start()和run()方法的区别 start()方法会创建新的线程并启动该线程,所以该方法会调用其他native方法,而run()方法就是: 正常的Java方法调用,即在原来的线程中执行java代码。 Java中Runnable和...

    Qt5中两种线程操作的方法 demo代码

    QThread::run()是线程的入口 相当于 main函数一样 创建的线程通过调用start()来执行run(); run() 是一个虚函数 通过子类实现方法 通过moveToThread()函数来实现 作用:将某一个对象从当前的线程中推到另一个线程中,...

Global site tag (gtag.js) - Google Analytics