Java线程并发访问的示例分析
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章给大家分享的是有关Java线程并发访问的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。class ConcurrentThread { /** * 分
千家信息网最后更新 2026年10月31日Java线程并发访问的示例分析
这篇文章给大家分享的是有关Java线程并发访问的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
class ConcurrentThread { /** * 分析线程并发访问代码解释原因 * volatile关键字: * 1):保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的 * 2):禁止进行指令重排序 * volatile本质是告诉JVM当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取 */ private volatile int count = 0; public void inc() { try { Thread.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } count++; } @Override public String toString() { return "[count=" + count + "]"; }}//----------------------------------------public class VolatileTest { public static void main(String[] args) { final ConcurrentThread counter = new ConcurrentThread(); for (int i = 0; i < 1000; i++) { new Thread(new Runnable() { @Override public void run() { counter.inc(); } }).start(); } System.out.println(counter); }}
原因解释:在Java的内存模型中每一个线程运行时都有一个线程栈,线程栈保存了线程运行时候变量值信息
当线程访问某一个对象值得时候:
1、通过对象的引用找到对应在堆内存的变量的值
2、把堆内存变量的具体值load到线程本地内存中,建立了一个变量副本,之后线程就不再和对象在堆内存变量值有任何关系,而是直接修改副本变量的值,在修改完之后的某一个时刻(线程退出之前),自动把线程变量副本的值回写到对象在堆中变量。这样堆中的对象的值就产生变化了。
结合上例,也就是说上面主函数中开启了1000个子线程,每个线程都有一个变量副本,每个线程修改变量只是临时修改了自己的副本,当线程结束时再将修改的值写入在主内存中,这样就出现了线程安全问题(拿到了主内存中过时的变量值),因此结果就不可能等于1000了,一般都会小于1000.

感谢各位的阅读!关于"Java线程并发访问的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
线程
变量
内存
副本
对象
分析
量值
示例
内容
原因
时候
更多
篇文章
解释
运行
不同
不错
实用
过时
安全
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
喔噻互联网科技有限公司
亿人帮互联网科技有限公司
互联网科技网
互联网科技深圳
疫情对互联网科技公司影响
奇酷互联网科技公司
互联网金融科技平台
深圳期待互联网科技
互联网汽车科技小镇
互联网科技公司需要的职位
中国科技互联网公司收入
移动互联网科技股
花神(南京)互联网科技有限公司
互联网数据科技专业
国大互联网教育科技有限公司薪资
上海京穆互联网科技有限公司
怎样加入科技互联网
雨阳互联网卡科技有限公司
唐山双旺合互联网科技产业园
山东亿川互联网科技有限责任公司
互联网科技公司简介
今日互联网科技
广州互联网络科技有限公司
狮子座互联网科技培训
洛阳昕诺飞互联网科技有限公司
996高科技互联网公司
半导体行业属于互联网高科技类吗
互联网硬科技公司
盐城市攀科互联网科技有限公司
科技美学互联网 艺术