社区
Java SE
帖子详情
线程的礼让问题
同学请坐の
2018-08-24 12:54:52
为什么有时i==3的时候会输出线程礼让,而有时不输出呢???求解
...全文
459
6
打赏
收藏
线程的礼让问题
为什么有时i==3的时候会输出线程礼让,而有时不输出呢???求解
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qq_39936465
2018-09-14
打赏
举报
回复
建议你在“线程礼让“前也加个线程名不就一目了然了。
qq_39936465
2018-09-14
打赏
举报
回复
其实都输出了,不过是显示误导了你,因为进程执行时间有误差的。
第一个情况是 a进程执行到i=3 并打印了 进程名,但还没有执行了礼让,这时候 b进程也执行了i=3 并先与a执行礼让打印了 进程名,然后a进程执行礼让后,b进程执行礼让。
第2个情况是 a进程执行更快执行过了打印进程名,并开始执行礼让时 b进程还没有执行 i=3 后的打印进程名。
这种情况发生很正常。
Dan淡淡的心
2018-08-24
打赏
举报
回复
Java线程中的Thread.yield( )方法,译为线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉, 让自己或者其它的线程运行,注意是让自己或者其他线程运行,并不是单纯的让给其他线程。 yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保 证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行! 举个例子:一帮朋友在排队上公交车,轮到Yield的时候,他突然说:我不想先上去了,咱们大家来竞赛上公交车。然后所有人就一块冲向公交车, 有可能是其他人先上车了,也有可能是Yield先上车了。 但是线程是有优先级的,优先级越高的人,就一定能第一个上车吗?这是不一定的,优先级高的人仅仅只是第一个上车的概率大了一点而已, 最终第一个上车的,也有可能是优先级最低的人。并且所谓的优先级执行,是在大量执行次数中才能体现出来的。
Surrin1999
2018-08-24
打赏
举报
回复
我以为你说怎么有时没输出= = 不过回答的方向是对的
Surrin1999
2018-08-24
打赏
举报
回复
你这个不是都输出了吗....上面那种情况是刚输出完A正在执行3 另一个线程就抢走了CPU控制权, 输出它的B正在执行3 然后各自礼让 输出对应的线程礼让: 下面那个是礼让语句执行了但没有交出CPU控制权(
礼让机制并不能保证另一个线程一定拿到CPU控制权 真正要做到请加同步锁
) 所以会继续输出线程礼让
qq_37257058
2018-08-24
打赏
举报
回复
线程礼让你改成换行输出,我觉得只是输出的格式困扰了你,没弄清问题本质,没你说的什么输出不输出的问题
18.4.4
线程
的
礼让
.mp4
18.4.4
线程
的
礼让
.mp4
线程
的基本概念、
线程
类、任务类、
线程
优先级、sleep()方法、yield()方法、join方法、interrupt()方法
线程
的基本概念、
线程
类、任务类、
线程
优先级、sleep()方法(休眠)、yield()方法(
礼让
)、join方法(合并)、interrupt()方法(中断),
线程
的生命周期
线程
与 进程 的关系:**有一个进程中至少包含一个
线程
**...
JAVA多
线程
精讲下
线程
的同步(
线程
安全
问题
)l
线程
的死锁l
线程
间通信l
线程
组l
线程
池l 多
线程
的第三种实现方案l 匿名内部类方式使用多
线程
l 定时器的使用l 多
线程
面试题
Java多
线程
基础-优秀程序员
线程
开发05_
线程
命名06_
线程
休眠07_
线程
优先级08_
线程
礼貌09_关键资源
问题
关键../等待...源码详情01_串行与并发02_进程与
线程
"03
线程
的生命04.
线程
的开辟05_
线程
的命名06_
线程
的休眠07_
线程
的优先08_
线程
的
礼让
09_...
java中的
线程
礼让
java中的
线程
礼让
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章