crossoverJie / JCSprout

👨‍🎓 Java Core Sprout : basic, concurrent, algorithm
https://crossoverjie.top/JCSprout
MIT License
27.07k stars 7.09k forks source link

交替打印奇偶数,控制输出到1000,但是经过测试发现有时会输出到1001 #165

Open chensongbin opened 5 years ago

chensongbin commented 5 years ago

代码地址

运行结果image

分析 1、当奇数线程在箭头处发生上下文切换 2、偶数线程获取锁,输出1000,并将number.start加为1001,释放锁,判断1001>1000,线程结束 3、奇数线程恢复执行,就会输出1001 image

chensongbin commented 5 years ago

改进思路: 可以参考Double Check机制 image

zongJianKun commented 5 years ago

你是?要是真想问东西扣扣问别发邮件邮件不会回的------------------ 原始邮件 ------------------ 发件人: "chsobin"notifications@github.com 发送时间: 2019年8月4日(星期天) 凌晨0:53 收件人: "crossoverJie/JCSprout"JCSprout@noreply.github.com; 抄送: "Subscribed"subscribed@noreply.github.com; 主题: Re: [crossoverJie/JCSprout] 交替打印奇偶数,控制输出到1000,但是经过测试发现有时会输出到1001 (#165)

改进思路: 可以参考Double Check机制

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.