V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  zengyufei  ›  全部回复第 1 页 / 共 1 页
回复总数  3
8 天前
回复了 Hatter 创建的主题 Java 请教下 Java 的 volatile 以及一点多线程的疑问
针对 Thread.sleep 有无导致结果不同,我也从 GPT 那里得到了答案。

忙循环导致子线程 a 无暇从主线程 a 那里得到更新。

大白话就是:我一直在忙,没有空去新的东西。

给你对比实验感知一下这个事情:

1 、不加 volatile
2 、Thread.sleep(100); 这句留着
即与你图片的代码完全一致即可。

运行只能 thread1 打印了一下。

对比实验动作 1:thread2 的 while 循环代码块加入 Thread.sleep(1);
为什么先从 thread2 开始加,因为你 thread1 执行完毕 a+1 了,下一个肯定是 thread2 先执行。
你可以先加 thread3 ,运行结果肯定没变化。
先从 thread2 开始加,会得到结果 thread2 也打印了语句。

对比实验动作 2:thread3 的 while 循环代码块加入 Thread.sleep(1);
运行结果大概打印 3-20 条,具体看概率。
因为 System.out.println 会模仿 volatile 功能,导致 thread1 偶尔会更新 a ,最后 thread1 会陷入忙循环。

对比实验动作 3:最后 thread1 的 while 循环代码块加入 Thread.sleep(1);
运行,你会正确打印 1-100 ,这是程序最初的目的。

最后,你自己总结一下。
8 天前
回复了 Hatter 创建的主题 Java 请教下 Java 的 volatile 以及一点多线程的疑问
针对 “1 、为什么我没加 volatile 也能打印到 100”,我来说一个正确答案:因为 System.out.println() 的调用。
参考: https://blog.csdn.net/weixin_47474875/article/details/128916512
第一次没啥经验

maven package
进入 target 复制 jar 包
上传到 linux 服务器
安装 k3s
执行 k3s 的 deployment.yaml

第二次是个老手

docker 运行 jenkins
jenkins 帮我拉代码
jenkins 帮我 maven package
jenkins 上传 jar 包到 linux 服务器(其他目标机器)
jenkins 帮我执行 deployment.yaml

第三次你自己动

让 jenkins 定时拉代码,自己重复第二次的动作
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2916 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 10ms · UTC 07:38 · PVG 15:38 · LAX 23:38 · JFK 02:38
Developed with CodeLauncher
♥ Do have faith in what you're doing.