黑马程序员技术交流社区

标题: 关于线程的run()方法 [打印本页]

作者: pvting    时间: 2014-9-9 23:51
标题: 关于线程的run()方法
本帖最后由 pvting 于 2014-9-10 00:14 编辑

学过线程的都知道的,调用线程一般都用start来起一个线程,而类里面的方法名是run,为什么不直接调用run方法呢?

作者: daoqin    时间: 2014-9-9 23:57
java中thread的start()和run()的区别:
1.start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码:通过调用Thread类的start()方法,启动一个线程,这时此线程是处于就绪状态,并没有运行。然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程.

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


作者: zhangxun    时间: 2014-9-10 00:10
楼上正解
作者: 逍遥呆    时间: 2014-9-10 00:18
可以直接记住就行了,start()是开启线程,你是可以直接调用run方法,可是没开启线程,这就没实现它的功能,那继承还是实现都没意义了。
作者: 谢建平    时间: 2014-9-10 01:27
应该是为了     直接调用方法 和启动线程都不冲突 ,同时存在的吧  
作者: 孤守星空    时间: 2014-9-10 07:25
给你看到入学测试题
分析以下程序运行结果,说明原理。(没有分析结果不得分)

    public class ThreadTest {
        public static void main(String args[]) {
        MyThread t = new MyThread();
        t.run();
        t.start();
        System.out.println("A");
        }
    }

    class MyThread extends Thread {
        public void run() {
            try {
                Thread.sleep(3000);
                } catch (InterruptedException e) {
             }
            System.out.println("B");
            }
    }

作者: 彭卫红    时间: 2014-9-10 07:31
1 楼分析很好
作者: pvting    时间: 2014-9-11 18:09
谢谢各位的回答,我明白了
作者: MR.Sun    时间: 2014-9-11 18:29
一楼正解!
作者: 郭.威    时间: 2014-9-14 00:28
这块我也麻烦的很
作者: ZZT    时间: 2016-5-11 16:14
qasnnnnnmmmm
作者: 小小飞碟    时间: 2016-5-17 13:50
都分析的不错,学到东西了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2