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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xmmsbb 中级黑马   /  2015-5-14 16:28  /  857 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo extends Thread
{
        public void run()
        {
                for(int x=0;x<20;x++)
                {
                        System.out.println(Thread.currentThread().getName()+"......"+x);
                }
        }
}
class ThreadDemo7
{
        public static void main(String[] args)
        {
                Demo d1=new Demo();
                Demo d2=new Demo();
                d1.start();
                d2.run();
        }
}
如果改成d1.run();d2.start();
结果为什么会不一样?

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

12 个回复

倒序浏览
线程对象调用run方法和调用start方法有区别的
调用run方法不开启线程,仅仅是对象调用方法而已,而调用start开启线程,同时会让JVM调用run方法在开启的线程中执行
希望能解决你的问题了!
回复 使用道具 举报
就你这样写来说虽然调用原理完全不同但是表面看运行结果应该没区别吧?
回复 使用道具 举报
start启动多线程,而run 只启动一个线程。
回复 使用道具 举报
bboyXiaoNuo 发表于 2015-5-14 18:01
就你这样写来说虽然调用原理完全不同但是表面看运行结果应该没区别吧?

不,运行结果有很大区别,虽然只是换个顺序
回复 使用道具 举报
冷月霜飞 发表于 2015-5-14 17:46
线程对象调用run方法和调用start方法有区别的
调用run方法不开启线程,仅仅是对象调用方法而已,而调用star ...

就是说在调用run()方法的时候还没有开启其他线程,等run()方法结束以后才开启的这个线程是吧
回复 使用道具 举报
xmmsbb 中级黑马 2015-5-14 19:41:30
7#
大西洋 发表于 2015-5-14 18:13
start启动多线程,而run 只启动一个线程。

哦哦 ,我懂了,谢谢
回复 使用道具 举报
xmmsbb 中级黑马 2015-5-14 19:44:16
8#
zyhcss 发表于 2015-5-14 19:41
哦哦 ,我懂了,谢谢

你好 我叫赵俨杭,来自山东,目前正在筹备考黑马,能留个QQ互相加一下吗?
回复 使用道具 举报
其实每一次运行都会不同,因为是多线程,运行的先后不能保证,会有不同结果
回复 使用道具 举报
没改之前,有两个线程在运行,一个是d1,一个是主线程,修改之后,还是两个线程运行,一个是主线程,一个是d2线程。run有两个作用,一个是启动线程,另外一个是调用run方法
回复 使用道具 举报
虽然看完了所有的解释,我还是有点不懂。。
回复 使用道具 举报
就一句话解释:因为d1.start()是开启多线程,d2.run()只是调用run方法,所以
d1.start();
d2.run();
这样写的时候,有主线程和d1创建的线程,由于线程间切换的不确定性,输出结果可能是main和Thread-0交叉,main先输出完,再Thread-0,Thread-0先输出完,再main。
当d1.run();d2.start();
这样写的时候,首先d1对象调用Demo的run方法,会将run方法中循环输出完毕后才会结束。之后执行到d2.start();开启多线程,由于主线程中没有任何输出语句,所以之后的输出都是d2开启的线程在调用run方法中的输出语句

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

回复 使用道具 举报 1 0
yuanhnu 发表于 2015-5-14 22:18
没改之前,有两个线程在运行,一个是d1,一个是主线程,修改之后,还是两个线程运行,一个是主线程,一个是d ...

start()是启动线程吧 run()方法是定义线程任务的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马