A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© pvting 中级黑马   /  2014-9-9 23:51  /  2145 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 pvting 于 2014-9-10 00:14 编辑

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

11 个回复

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

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

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
楼上正解
回复 使用道具 举报
可以直接记住就行了,start()是开启线程,你是可以直接调用run方法,可是没开启线程,这就没实现它的功能,那继承还是实现都没意义了。
回复 使用道具 举报
应该是为了     直接调用方法 和启动线程都不冲突 ,同时存在的吧  
回复 使用道具 举报
给你看到入学测试题
分析以下程序运行结果,说明原理。(没有分析结果不得分)

    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");
            }
    }

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 很给力!

查看全部评分

回复 使用道具 举报
1 楼分析很好
回复 使用道具 举报
pvting 中级黑马 2014-9-11 18:09:03
8#
谢谢各位的回答,我明白了
回复 使用道具 举报
MR.Sun 中级黑马 2014-9-11 18:29:52
9#
一楼正解!
回复 使用道具 举报
这块我也麻烦的很
回复 使用道具 举报
ZZT 中级黑马 2016-5-11 16:14:42
11#
qasnnnnnmmmm
回复 使用道具 举报
都分析的不错,学到东西了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马