thread的start()和run()

本文详细解析了Java中线程的启动与运行机制,包括run()与start()方法的区别,线程调度机制的行为特点,以及如何通过实例观察线程的并发执行情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

run()方法,用于封装线程运行的任务代码。直接用创建的线程对象调用,

并没有产生新的线程,仅仅是当前正在运行的线程(如,主线程)在执行run方法.


start()方法,共有两个作用,1,开启了当前线程,也就是说,

当前程序又多了一条执行路径和当前线程(主线程)并发执行。

而run()方法会被新开启的线程运行。2,调用线程的run()方法。


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


 


 


因为线程调度机制的行为是不确定的,所以每次运行该程序都会有不同的结果,你可以把你的循环次数增多些,然后看看执行的结果,你会发现main()的线程和Thread1是交替运行的。

4.还有就是尽管线程的调度顺序是不固定的,但是如果有很多线程被阻塞等待运行,调度程序将会让优先级高的线程先执行,而优先级低的线程执行的频率会低一些。


 


 


线程的启动是比较复杂的,需要为线程分配资源,它的START方法被调用时系统才会为线程分配资源。

你上面调用线程的run方法只能算普通的方法调用一样,得运行完run里面的代码整个程序才能往下进行,而如果调用start方法,线程和MAIN方法就会抢资源,打印的语句会交替出现,你把线程里的循环次数加到300,试一下依次调run、start和两次都调start方法时所出现的情况应该能看出点端倪~~~


转载于:https://my.oschina.net/u/1382022/blog/196994

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值