线程问题,一点也不懂阿!!

zhanggc1001 2007-11-30 09:18:21
1。假设我在主线程里启动了100个线程,是不是每启动一个就那个线程就开始执行了呢?
2。当一个线程执行完释放资源后,是不是下个开始的线程是随机的,还是根据队列来的阿?
3。run方法是在调用start方法后开始执行的对吧,但是我调试时没看到调用run方法阿,这是怎么回事阿?
...全文
78 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
迷眼流金 2007-11-30
  • 打赏
  • 举报
回复
对于2还有一点补充一下,当前前面的比后面的要快(由其启动时间和优先级)的意思是,先启动,或优先级高的线程能有更多的机会先进门,当然,也不能排除后面突然杀出个程咬金的可能

总之,多个并发线程的执行顺序几乎是无法预测的
迷眼流金 2007-11-30
  • 打赏
  • 举报
回复
1.线程的调度由系统决定,jvm中依次启动线程,相当于只是同志处理器这些线程正在等待执行,具体的顺序和调度规则由系统的相关算法决定。
2.下个开始的线程是随机的,你可以这样想,多个人(线程)进一个门(处理器),当前前面的比后面的要快(由其启动时间和优先级),但是同在前面的几个中是谁挤进去了就是随机的了(可能也有算法,俺也不了解…)
3.同1,start只是表示线程已能执行,但是不一定系统马上就调用了他的执行方法
个人见解
zazxzx 2007-11-30
  • 打赏
  • 举报
回复
楼上回答完全正确 我就不多说了

关于线程要注意资源共享问题 可考虑加锁
AndyJee 2007-11-30
  • 打赏
  • 举报
回复
线程有4个状态:新状态、可执行状态、死亡状态、阻塞状态。具体到网上查。

你说的“启动”指可执行状态,CPU会分时间到100个线程,每个都一点一点的执行。

1、是。
2、不按队列,只要都启动了,就并行的执行。(注意线程资源共享问题,经常会有冲突问题)
3、run()是java.lang.Thread类方法或者Runnable接口方法,需要重写。它就是线程开始干活的入口。
start()是让线程进入可执行状态。
jlwei888 2007-11-30
  • 打赏
  • 举报
回复

run是线程的入口函数,就像Main()函数一样,只要线程启动,就执行run中的程序!
AndyJee 2007-11-30
  • 打赏
  • 举报
回复
相当同意iooyoo的补充

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧