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

相关推荐

04-14 15:37
浙江大学 Java
刚过了腾讯云的一面,想为二面和其他大厂的面试攒点人品,所以也是第一次来尝试发面经啦1.自我介绍2.agent项目的并发与配额管理3.agent项目大流量下可以采取的措施4.查询改写、RAG、上下文工程的具体实现流程5.检索召回策略6.Redis缓存策略,存哪些数据,为什么7.Redis的分布式锁如何实现的,锁粒度是什么8.Redis宕机的话会出现死锁嘛?9.和Zookeeper相比的优缺点在哪里?10.操作系统里,向一个文件里写入字符串时,底层机制是什么?11.虚拟内存了解嘛?12.详细讲一下TCP建联和断联的过程13.断联的时候,在某些情况下可以三次挥手嘛?14.为什么客户端在第四次挥手后不直接进入close而是要等待?等待的时间是多少,为什么?15.场景题:有一个1TB的文件(二进制存储的int类型的数据),但是显存只有100MB,可以有预热(预热可以做你想做的事,不用管时间),用户输入一个数,判断这个数在不在文件里,返回yes&nbsp;or&nbsp;no,你觉得该如何实现呢?16.手撕:LRU缓存17.针对手撕提问思路,某些行的具体作用反问:1.非科班出身,相比于计算机等科班出身的差距在哪里2.几轮面试,啥时候有结果等全程1h左右,面试官人特别好,温柔的引导我回答,手撕的时候脑子突然宕机了少写了一行代码,测试用例结果不对特别紧张,但是面试官一直安慰我说别紧张慢慢来仔细看看,特别感谢遇到这么好的面试官呜呜呜。希望大家都能遇到心软的神!
查看18道真题和解析
点赞 评论 收藏
分享
03-27 17:52
门头沟学院 Java
1.&nbsp;代码考核题:四数之和,并考虑去重终止条件和提前退出优化(剪枝策略)2.&nbsp;JWT在网络中是明文传输的吗?它怎么保证安全性?3.&nbsp;JWT的加密算法是什么?4.&nbsp;MD5是怎么实现的?(具体工作原理)5.&nbsp;加密算法和摘要算法的区别是什么?摘要需要解密吗?6.&nbsp;为什么MD5要加盐?盐值是怎么计算的?固定值会被撞出来吗?7.&nbsp;HTTP和HTTPS的区别?8.&nbsp;HTTPS证书验证过程中,客户端向CA求证证书有效性是怎么做的?CA服务器挂了有影响吗?9.&nbsp;Redis是单线程的,为什么还那么快?10.&nbsp;订单ID是怎么生成的?为什么能保证全局唯一?11.&nbsp;MySQL有几种隔离级别?分别是什么?怎么解决并发问题?12.&nbsp;死锁发生的条件有哪些?13.&nbsp;商品有哪些基础字段?哪些字段设了索引?14.&nbsp;根据分类查询能走到索引上吗?15.&nbsp;id不等于什么能走索引吗?id不以什么开头能做索引?16.&nbsp;索引匹配的流程是什么?17.&nbsp;用列表构建B+树的流程是什么样子的?18.&nbsp;Redis用了哪些数据结构?zset底层是怎么插入的?会有什么挪动?19.&nbsp;跳表和红黑树相比的优劣势是什么?时间复杂度相比如何?20.&nbsp;双token机制中两个token分别存在哪里?21.&nbsp;access&nbsp;token过期后,终端把过期token带过来,会自动帮他刷票吗?刷票时间是什么?22.&nbsp;为什么access&nbsp;token和refresh&nbsp;token不直接设为一样长?23.&nbsp;延迟双删的时间是怎么定的?24.&nbsp;延迟期间如果有新的读请求把旧数据写入缓存怎么办?25.&nbsp;分布式锁的实现方式?Redis主从架构下主节点挂了,从节点顶上会有什么问题?26.&nbsp;统一讲一下RAG、Agent、Function&nbsp;Calling、MCP各种概念之间的关系和区别?27.&nbsp;SSE和HTTP的关系?28.&nbsp;TCP的队头阻塞了解吗?HTTP是怎么解决队头阻塞问题的?(1.1、2.0、3.0分别怎么解决)29.&nbsp;智能面试平台用的是什么模型?上下文最大值是多少?30.&nbsp;如何设计规避context超限?31.&nbsp;实习时间可以怎么安排?入职时间有什么要求?32.&nbsp;深圳工作/实习会有什么阻力吗?部门是QQ浏览器,上午hr面拒了客户端之后,hr就直接转到同部门的后端这边来了,可以直接从二面开始。下午刚面完pdd就开面tx后端。拷打了整整一个半小时,燃尽了。一天三面的强度还是太大了,但面试官人还不错,最后聊得挺开心的。还是有希望过的。(腾讯别给我整出三面就行)
喵_coding:这问的太广了,现在真觉得背不完了,ai,八股,场景,各种真实应用,太多了
点赞 评论 收藏
分享
评论
7
18
分享

创作者周榜

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