Java多线程可见性(一)
来源:互联网 发布:sql 奖学金加200 编辑:程序博客网 时间:2024/06/14 23:04
一:内存可见性
线程对共享变量的修改,可以及时的被其他线程看到。
那何为共享变量呢?就是在多个线程的工作内存中存在
如下图所示:所谓的共享变量就是主内存中名为S的变量,程序中所有的变量都会存储在主内存中;其他线程也会有自己的工作内存,此工作内存的作用是为线程与主内存之间建立桥梁
由此图总结如下:
1:其他线程不可以直接访问主内存中的变量,必须先与自己的工作内存进行交互再由工作内存与主内存进行交互。
2:不同线程之间无法直接访问其他线程工作内存中的变量,线程间变量值的传递需通过主内存来完成。
3:主内存作为其他线程之间相交互的桥梁,线程1中更改共享变量想被其他线程及时看到,则需要工作内存1将更新的值刷新到主内存中,由主内存将最新的共享变量值更新到工作内存2中
如下图所示:
二:可见性实现方式
1:synchronized
线程解锁:退出synchronized代码块时,主内存中的共享变量为最新值
线程加锁:进入synchronized代码块时,清空工作内存中共享变量的值,从而使用时从主内存中重新读取最新值
注:线程解锁前对共享变量的修改在下次加锁时对其他线程可见
实现可见性步骤:
获取互斥锁 - - >清空工作内存 –>从主内存拷贝变量的最新副本到工作内存 –>执行代码 –>将更改后的共享变量刷新到主内存 – >释放互斥锁
阅读全文
0 0
- Java多线程可见性(一)
- java多线程可见性
- 浅谈Java多线程(内存可见性)
- [Java 多线程] 变量可见性
- Java多线程内存可见性
- java多线程的可见性
- Java多线程:内存可见性
- JAVA多线程内存可见性
- java多线程之可见性
- 多线程之内存可见性Volatile(一)
- 多线程之内存可见性Volatile(一)
- Java多线程 之 原子性与可见性(八)
- Java多线程 之 原子性与可见性(八)
- java-多线程深入(二)互斥性和可见性
- 浅谈Java多线程(synchronized实现可见性)
- 浅谈Java多线程(volatile实现可见性)
- Java多线程之内存可见性
- Java多线程之可见性分析
- 前端常用特效
- 【转载】IronPython与科学计算环境配置与安装
- ubuntu16.04中如何将终端添加到右键
- MOOC_人工智能原理学习笔记2
- Sysmac Studio 2017 v1.2免费版下载附安装教程
- Java多线程可见性(一)
- LaTex常用语法
- 喜欢写程序,做程序员就是上天堂;
- 求一个单链表的中间节点
- scatter函数参数详解
- JavaScript基础知识——函数的 arguments 和 this
- Codeforces-148C-standard output(构造)
- 62-Unique Paths
- EA&UML日拱一卒-多任务编程超入门-(11)学以致用