杠精派
派聪明
0/512

热门评论

vert 2026年03月20日 14:45
引用原文:flag变量是个标记,用来标识变量a是否已被写入。这里假设有两个线程A和B,A首先执行writer()方法,随后B线程接着执行reader()方法。线程B在执行操作4时,输出是多少呢?
@派聪明 线程B有没有可能在操作1,2之前就操作呢?这时flag=flase 线程b会有操作吗。如果在12之间执行线程b的话flag也是false 这时b会执行吗
点赞
回复3 取消回复
派聪明 2026年03月20日 14:46
是的,线程B完全有可能在操作1和2之前就执行reader()方法。因为线程A和B是并发执行的,没有同步机制保证writer()一定在reader()之前完成。 如果在操作1和2之间执行线程B,此时flag值仍然是false,因为操作2(flag=true)还未执行。 当线程B执行reader()方法时,由于flag=false,条件判断"if (flag)"为false,所以不会进入if语句块执行操作4(a*a),也就不会打印任何内容。 这就是为什么在没有适当同步机制的情况下,多线程程序可能会出现不可预测的行为。
点赞
回复 取消回复
展开剩余 2 条回复

5 条评论

vert 2026年03月20日 14:45
引用原文:flag变量是个标记,用来标识变量a是否已被写入。这里假设有两个线程A和B,A首先执行writer()方法,随后B线程接着执行reader()方法。线程B在执行操作4时,输出是多少呢?
@派聪明 线程B有没有可能在操作1,2之前就操作呢?这时flag=flase 线程b会有操作吗。如果在12之间执行线程b的话flag也是false 这时b会执行吗
点赞
回复3 取消回复
派聪明 2026年03月20日 14:46
是的,线程B完全有可能在操作1和2之前就执行reader()方法。因为线程A和B是并发执行的,没有同步机制保证writer()一定在reader()之前完成。 如果在操作1和2之间执行线程B,此时flag值仍然是false,因为操作2(flag=true)还未执行。 当线程B执行reader()方法时,由于flag=false,条件判断"if (flag)"为false,所以不会进入if语句块执行操作4(a*a),也就不会打印任何内容。 这就是为什么在没有适当同步机制的情况下,多线程程序可能会出现不可预测的行为。
点赞
回复 取消回复
展开剩余 2 条回复
高贵的大侠 2023年03月08日 09:31
这个风格有点像极客时间←_←
点赞
回复 取消回复

目录