两个线程交替打印0-100

大佬们,我有个问题,可以帮忙解决下吗。🥹🥹
问题:两个线程交替打印0-100,当我使用了for循环,为什么会重复打印?
结果是
线程一打印0
线程二打印0
线程一打印1
线程二打印1

线程一打印100
线程二打印100

当我把变量i改为static修饰为共享数据时,问题就解决了。但是我不是只new了一次pk对象,也就是说我不加static不也是两个线程共享变量i吗?那不应该不会重复打印吗?
代码如下 谢谢大佬们
class p2 {    public static void main(String[] args) {        pk p=new pk();        Thread t1=new Thread(p);        Thread t2=new Thread(p);        t1.setName(&quot;线程一&quot;);        t2.setName(&quot;线程二&quot;);        t1.start();        t2.start();    }}class pk implements Runnable{    public void run() {        synchronized (this) {            for(int i=0;i<=100;i++) {                System.out.println(Thread.currentThread().getName()+&quot;在打印数字&quot;+i);                notify();                try {                    wait();                } catch (Exception e) {                    throw new RuntimeException();                }            }        }    }} #Java#  #多线程#
全部评论
你把i放到pk类 里面,for写成for(;i<100;i++)
2 回复 分享
发布于 2023-05-28 22:27 浙江
你这里for循环里面int i = 0 变成线程局部变量,所以会循环打印但是没有共享到i
2 回复 分享
发布于 2023-05-28 22:26 浙江
感觉可能因为i是局部变量,每个线程私有所以会重复打印。然后加了static后所有线程共享所以不重复了。
1 回复 分享
发布于 2023-05-27 11:36 福建
这种交替的直接用semphere,很方便
点赞 回复 分享
发布于 2023-06-22 18:21 江苏
方法内局部变量线程私有
点赞 回复 分享
发布于 2023-05-27 16:23 上海
好有道理
点赞 回复 分享
发布于 2023-05-27 08:16 山东
肯定涉及到了线程之间的同步问题啊
点赞 回复 分享
发布于 2023-05-27 06:56 广东

相关推荐

人生第一次面试,从中午开始就紧张的不行,吞了两粒普萘洛尔,面试的时候确实一点没紧张了。问了快四十个问题,面经写出来才发现问题这么多,怎么记得看面经都是只有一二十个,是不是大家发的时候都精简了一些导致的?鼠鼠实力还是不够,死锁居然没想起来,aba问题一句话的事,也没看过,场景题也只能凭自己经验瞎编,没提前准备好在面试官人比较好,没答上来也给提示,说没关系。(感觉面试官也有点紧张,让我放松了不少)没有手撕也比较惊讶,不知道是出于何考虑。希望能有二面吧,给我一点正向反馈吧,压力真的是爆了问题:1.&nbsp;请花大概五到十分钟,介绍一下你的项目经验,以及整体遇到的问题和如何解决的。2.&nbsp;本地生活服务平台项目,是你一个人完成的还是团队合作完成的?3.&nbsp;这个项目(本地生活服务平台)中,你觉得遇到了最重要、最难的问题是什么?你是如何解决的?4.&nbsp;经过你这个缓存设计之后,你的整个系统&nbsp;QPS&nbsp;可以到多少?假如说我现在要扛&nbsp;1&nbsp;万&nbsp;QPS&nbsp;的话,你觉得整个系统还需要做什么升级改造?5.&nbsp;你怎么样去识别哪些数据是热点数据的?6.&nbsp;假如说你的系统一直运行得很好,突然某天出现了宕机,你觉得应该怎么去定位?大概的流程知道吗?7.&nbsp;你觉得秒杀系统这种商品购买和普通的商品购买,它会有什么不同?整个系统需要考虑什么因素?8.&nbsp;如果系统现在能扛&nbsp;1000&nbsp;QPS,瞬间来了&nbsp;3000-4000&nbsp;个客户秒杀,可能会发生什么?应该有什么措施去对抗/缓解这种情况?9.&nbsp;你滑动窗口限流用的是什么组件?大概是怎么实现的?10.&nbsp;针对第一个&nbsp;下单资格判断Lua脚本,脚本主要的逻辑是什么?11.&nbsp;如果配合&nbsp;Lua&nbsp;脚本的话,有没有什么注意事项?12.&nbsp;假如因为不小心写了个&nbsp;bug,这个&nbsp;Lua&nbsp;脚本执行需要&nbsp;10&nbsp;秒或者&nbsp;20&nbsp;秒,你觉得这个时候系统可能会发生什么情况?13.&nbsp;假设&nbsp;Redis&nbsp;的&nbsp;Lua&nbsp;脚本正在执行一个扣减操作还没执行完,这时候其他客户端的请求打过来了,它会阻塞吗?还是不阻塞?14.&nbsp;你们的项目里面用到&nbsp;Caffeine,为什么用它?主要用它做什么?架构设计上有什么考虑?15.&nbsp;Caffeine&nbsp;的淘汰策略你大概知道吗?16.&nbsp;系统运行中如果出现慢&nbsp;SQL,一般是什么原因?以及如何定位慢&nbsp;SQL&nbsp;问题?17.&nbsp;假如系统用户量非常庞大(两三千万),要给数据库去加索引的话,这个索引加起来可能耗时两三个小时,在执行索引时需要注意什么?18.&nbsp;你怎么样去测你的&nbsp;QPS?你评估出来的&nbsp;1000&nbsp;QPS&nbsp;主要是关注哪些指标?19.&nbsp;本地生活服务平台是在公司里面的经历,还是你们自己的一个学习项目?20.&nbsp;对于&nbsp;Kafka&nbsp;了解吗?它是怎么样保证消息顺序的?21.&nbsp;即便做了缓存缓解压力,MySQL&nbsp;还是可能有瓶颈,你觉得这个时候需要做哪些对&nbsp;MySQL&nbsp;的优化?22.&nbsp;你说数据库做主从分离,读从库时,怎么样去保持主库和备库的数据一致性?23.&nbsp;你们整个系统有没有用到什么监控?你觉得应该做哪些监控去保证稳定,避免发生用户投诉而你没感知的情况?24.&nbsp;假如系统突然之间&nbsp;CPU&nbsp;报警到&nbsp;90%,或者内存马上要不足了,你应该怎么样从哪些方面去排查?25.&nbsp;假如系统做了集群,其中有台机器持续报警,你没时间定位,最快的止血方式是什么?26.&nbsp;如果&nbsp;Redis&nbsp;数据更新了,但&nbsp;Caffeine&nbsp;的数据还是旧的(双缓存不一致),什么情况下会出这种&nbsp;bug?发生了要怎么办?27.&nbsp;订单系统里的超时关闭(延时任务),你觉得应该怎么实现?28.&nbsp;怎么防范爬虫?29.&nbsp;滑动窗口限流和固定窗口限流有什么区别?为什么用滑动窗口?30.&nbsp;支付回调和关单任务可能同时操作同一个订单,应该怎么样去设计避免冲突?31.&nbsp;你大概知道什么是&nbsp;CAS&nbsp;吗?这里面可能会有什么问题?除了空耗&nbsp;CPU&nbsp;之外,还有什么其他问题?了解过&nbsp;ABA&nbsp;问题吗?32.&nbsp;谈到锁的升级,可以大概说一下&nbsp;Java(Synchronized)锁的升级策略吗?33.&nbsp;如何避免死锁?如果系统中确实出现了死锁,要怎么样去排查?34.&nbsp;Java&nbsp;的&nbsp;equals&nbsp;和&nbsp;==&nbsp;有什么区别?一般重写&nbsp;equals&nbsp;的话,为什么还需要重写&nbsp;hashCode?35.&nbsp;对&nbsp;Vibe&nbsp;Coding&nbsp;了解吗?平时使用什么框架或工具?在使用这些&nbsp;AI&nbsp;工具生成代码的过程中,你遇到过什么问题?36.&nbsp;假如用户提出恶意问题(提示词攻击),比如要求删除知识库文档,你如何避免这种恶意操作?37.&nbsp;自动问答知识库系统(RAG)中,为什么要用&nbsp;BM25&nbsp;和向量混合索引?基于什么考虑?38.&nbsp;你怎么样评价或者说评估你的&nbsp;RAG&nbsp;系统的好坏?应该做哪些测试?提交给决策者做可行性分析可以给出哪些数据?39.&nbsp;如果用户问了&nbsp;A&nbsp;问题,预期&nbsp;A&nbsp;答案,但始终得到错误答案,你怎么样去定位排查这个问题反问1.&nbsp;做的业务主要是什么?技术栈是什么样的?2.&nbsp;实习生培养机制大概是怎样的?3.&nbsp;真实的业务开发中,是否有用到&nbsp;AI&nbsp;技术?是怎么使用的?
发面经攒人品
点赞 评论 收藏
分享
评论
7
18
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务