两个线程交替打印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 广东

相关推荐

01-29 16:47
门头沟学院 Java
手撕leetcode1001.&nbsp;类加载:&nbsp;聊聊&nbsp;JVM&nbsp;类加载的一个过程。类是怎么样从加载到使用之后被销毁的?2.&nbsp;双亲委派:&nbsp;类加载的时候有一个双亲委派,它的作用是什么?如果没有双亲委派,由(自定义加载器)去负责类加载的话会发生什么?3.&nbsp;内存结构:&nbsp;运行时数据区会把类的信息加载到什么部分?运行时数据区都有什么结构?4.&nbsp;内存结构:&nbsp;运行数据区包含哪几部分?5.&nbsp;类信息存储:&nbsp;类的信息会被放在运行数据区哪一个部分?6.&nbsp;堆&nbsp;vs&nbsp;方法区:&nbsp;方法区里面放的是什么?堆上面放的又是什么?7.&nbsp;堆内容:&nbsp;堆上面有类的信息吗?8.&nbsp;版本差异:&nbsp;不同虚拟机对方法区的实现是有区别的。JDK&nbsp;1.7&nbsp;之前和&nbsp;1.7&nbsp;之后,整个方法区有什么区别吗?三、&nbsp;并发编程&nbsp;(ThreadLocal)1.&nbsp;基础概念:&nbsp;能稍微聊一聊&nbsp;ThreadLocal&nbsp;吗?平常开发中有用过吗?2.&nbsp;存储位置:&nbsp;ThreadLocalMap&nbsp;是维护在什么地方的?是所有线程共用一份&nbsp;ThreadLocalMap&nbsp;吗?3.&nbsp;内部结构:&nbsp;它的&nbsp;Key&nbsp;和&nbsp;Value&nbsp;分别是什么?4.&nbsp;引用类型:&nbsp;Map&nbsp;的&nbsp;Key&nbsp;是一个弱引用对吧?如果&nbsp;Key&nbsp;设置成弱引用,这样设计的原因是什么?5.&nbsp;引用设计:&nbsp;那为什么不把&nbsp;Value&nbsp;也设置为弱引用呢?四、&nbsp;垃圾回收&nbsp;(GC)1.&nbsp;GC&nbsp;流程:&nbsp;现在比较主流的垃圾回收是什么?在堆上是怎么回收的?2.&nbsp;大对象分配:&nbsp;如果现在有一个超大对象(大小超过&nbsp;Eden&nbsp;区),进来之后在堆上会发生什么情况?描述一下流程。3.&nbsp;垃圾回收器:&nbsp;有了解过常见的一些垃圾回收器吗?在新生代用哪些?在老年代用哪些?4.&nbsp;Parallel&nbsp;Scavenge:&nbsp;你提到&nbsp;Parallel&nbsp;系列更关注吞吐量,它是通过什么方式去保证吞吐量的?5.&nbsp;CMS&nbsp;退化:&nbsp;有了解过&nbsp;CMS&nbsp;在什么情况下会退化成串行(Serial&nbsp;Old)垃圾回收器吗?6.&nbsp;CMS&nbsp;流程:&nbsp;讲一下&nbsp;CMS&nbsp;整个的回收流程。7.&nbsp;CMS&nbsp;碎片:&nbsp;如果用&nbsp;CMS&nbsp;的情况下,标记清除后产生的碎片空间怎么处理?五、&nbsp;数据库&nbsp;(MySQL)1.&nbsp;三大日志:&nbsp;有了解过数据库的三个日志吗?Redo&nbsp;log、Undo&nbsp;log&nbsp;和&nbsp;Binlog,分别大概介绍一下是做什么的?2.&nbsp;两阶段提交:&nbsp;能大概说一下在提交&nbsp;Binlog&nbsp;和&nbsp;Redo&nbsp;log&nbsp;时,整个两阶段提交的一个流程吗?3.&nbsp;隔离级别:&nbsp;有几种隔离级别?不同的隔离级别下会产生什么样的问题?4.&nbsp;幻读解决方案:&nbsp;InnoDB&nbsp;是怎么解决幻读的?在可重复读(RR)的情况下怎么解决?5.&nbsp;MVCC:&nbsp;聊聊&nbsp;MVCC,整个流程是什么样的?六、&nbsp;项目与实习
查看25道真题和解析
点赞 评论 收藏
分享
1.5投递(hr似乎也是实习生)1.6Hr电话面1.7技术面,2小时就hr最后oc了1.8发的offer问的都比较简单之前忘记发了哈哈,发出来攒攒人品1.对公司的了解&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;答了一些CICD集成相关的,就是未来方向和公司业务垂直2.购物优惠劵100-20&nbsp;能用3次&nbsp;,使用边界值法怎么设计测试用例&nbsp;&nbsp;&nbsp;(这里答得不是很好,颗粒度应该再细点)3.linux查cpu&nbsp;内存占用率4.mysql&nbsp;左连接和右连接的区别5.怎么看待加班&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为项目上线可以加班,但不是评估个人价值的方式6.项目接口自动化,ui自动化怎么做的&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;po模式7.selenium定位元素的方式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id,name,css,Xpath等等8.会不会因为学校的事情影响工作&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;直言学校脱节于社会生产,没有必要不会影响工作9.未来的职业规划和发展面了应该有3。40分钟,后面聊到学校聊笑了,答完一个问题,面试官都是会等一下,可能是现场想的问题2.9已经入职一个月了,个人觉得这边氛围挺不错的,偶尔加班领导还会给下午茶,做的业务是运维方向web测试听说转正薪资偏低,实习可以来
查看9道真题和解析
点赞 评论 收藏
分享
查看16道真题和解析
点赞 评论 收藏
分享
评论
7
18
分享

创作者周榜

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