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

相关推荐

主管面,开会迟到,问题不大,没等多久。本以为纯聊天(到底是为什么会有这样的幻想啊!!!),结果是纯压力面,这个压力还不一样,主管是非常和蔼可亲的压力,就是云淡风轻的问出一针见血的问题,没有任何八股,全是场景题。针对我作品中问题提出的拓展,还有一眼看出我作品哪里有问题,然后会深挖,挖到你回答不出来为止。面试具体问题好像不太能说,我就不说了,就是问这些内容。然后就是感觉面试官一开始把我当社招面的,然后突然好像反应过来面的是实习生,之后压力瞬间小很多了,压力时间40多分钟。然后QA环节,问了根据我刚才的表现提出建议,建议学好数学,还有因为我是UE和Maya技术栈,问我转Max要多久,我说一周以内,问学会Maxscript多久,我说如果是Python应该可以较短时间内上手API,如果是Maxscript可能没办法短期内掌握,因为相当于学一门新的语言了,反问“学一门新的语言很难吗”,被压力到了,回答“短期内掌握的话还是挺难的”,“短期是多久”我说“要是让我三天就快速上手制作工具我估计不太行,但是如果有一周左右的话应该可以上手制作一些简单的脚本工具。”问项目的一些情况,问是否有培训或者遇到无法独立完成的问题可以找谁问。还有一些细节的东西就不方便说了。总之就是挺压力的,会综合考察你的技术能力,学习能力,临场反应,解决突发问题的能力等等隔天约HR面。😢😢压力的我都以为我要挂了。
点赞 评论 收藏
分享
评论
7
18
分享

创作者周榜

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