首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

面试官:可以说下Java内存模型(JMM)吗

Java内存模型-同步操作与规则 Java内存模型-同步操作与规则 同步八种操作 lock (锁定):把一个主内存的变量标识为一条线程独占状态。...不允许 read 和 load 、 store 和 write 操作之一单独出现. 不允许一个线程丢弃它的最近 assign 的操作,即变量在工作内存中改变了之后必须同步到主内存中....不允许一个线程无原因地(没有发生过任何 assign 操作)把数据从工作内存同步回主内存中....一个新的变量只能在主内存中诞生,不允许在工作内存中直接使用一个未被初始化(load 或 assign )的变量。...如果一个变量事先没有被 lock 操作锁定,则不允许对它执行 unlock 操作;也不允许去 unlock 一个被其他线程锁定的变量.

60820

Java内存模型 - 同步八种操作

Java 内存模型 - 同步操作与规则 [image-20201225231625961] Java内存模型 - 同步八种操作 锁定(lock): 作用于主内存中的变量,将他标记为一个线程独享变量。...Java内存模型 - 同步规则 不允许 read 和 load、store 和 write 操作之一单独出现,即不允许一个变量从主内存读取了但工作内存不接受,或者从工作内存发起回写了但主内存不接受的情况出现...不允许一个线程丢弃它的最近的 assign 操作,即变量在工作内存中改变了之后必须把该变化同步回主内存。...不允许一个线程无原因地(没有发生过任何 assign 操作)把数据从线程的工作内存同步回主内存中。...如果一个变量事先没有被 lock 操作锁定,则不允许对它执行 unlock 操作,也不允许去 unlock 一个被其他线程锁定住的变量。 [wx.jpg]

92000

JAVA系列之内存模型(JMM)

3、Java内存模型作用 Java内存模型就是为了解决多线程下共享数据的读写一致性问题 4、Java内存模型的同步操作与规则 关于主内存与工作内存之间具体的交互协议,Java内存模型定义了以下8种具体的操作来完成...read和load、store和write操作之一单独出现,即不允许出现从主内存读取了而工作内存不接受,或者从工作内存回写了但主内存不接受的情况出现; (2)不允许一个线程丢弃它最近的assign操作...,即变量在工作内存变化了必须把该变化同步回主内存; (3)不允许一个线程无原因地(即未发生过assign操作)把一个变量从工作内存同步回主内存; (4)一个新的变量必须在主内存中诞生,不允许工作内存中直接使用一个未被初始化...5、Java内存模型三大特性 上面介绍的内存模型同步操作与规则就是围绕原子性、可见性、顺序性三个特性来设计的。 5.1 原子性 原子性是指一个操作是不可中断的。...1、硬件内存架构使得必须建立内存模型来保证多线程环境下对共享内存访问的正确性; 2、Java内存模型定义了保证多线程环境下共享变量一致性的规则; 3、Java内存模型提供了工作内存与主内存交互的八大同步操作和八大规则

19430

慕课网高并发实战(二)-并发基础

的静态内存存储模型, 他只是一种对内存模型的物理划分而已,只局限在内存,而且只局限在JVM的内存 如果线程A和线程B要通信,必须经历两个过程: 1、A将本地内存变量刷新到主内存 2、B从主内存中读取变量 八种同步操作...同步操作与规则 1.lock(锁定):作用于主内存的变量,把一个变量标识变为一条线程独占状态 2.unlock(解锁):作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定...read和load、store和write操作之一单独出现 3.不允许一个线程丢弃他的最近assign的操作,即变量在工作内存中改变了之后必须同步到主内存中 4.不允许一个线程无原因地(没有发生过任何...assign操作)把数据从工作内存同步到主内存中 5.一个新的变量只能在主内存中诞生,不允许在工作内存中直接使用一个未被初始化(load或assign)的变量。...unlock操作,也不允许去unlock一个被其他线程锁定的变量 9.对一个变量执行unlock操作之前,必须先把此变量同步到主内存中(执行store和write操作) 4.并发的优势和风险 ?

53830

Java内存模型深入详解(JMM)

从更底层的层次来说 主内存直接对应于物理硬件的内存 为了更好的运行速度,虚拟机(甚至硬件系统的本身的优化措施)可能会让工作内存优先存储于寄存器和高速缓存器中,因为程序运行时主要访问读写的是工作内存 3 内存间同步操作...,那么线程T1的中断操作与其他所有线程发现T2被中断了同步通过抛出InterruptedException异常,或者调用Thread.interrupted或Thread.isInterrupted 不允许...read/load、store/write操作之一单独出现 不允许一个变量从主内存读取了但工作内存不接收,或从工作内存发起回写但主内存不接收 不允许一个线程丢弃它的最近的assign 即变量在工作内存中改变...(为工作内存变量赋值)后必须把该变化同步回主内存 新变量只能在主内存“诞生”,不允许在工作内存直接使用一个未被初始化(load或assign)的变量 换话说就是一个变量在实施use,store之前,必须先执行过...assign和load 如果一个变量事先没有被load锁定,则不允许对它执行unlock,也不允许去unlock一个被其它线程锁定的变量 对一个变量执行unloack前,必须把此变量同步回主内存中(执行

28710

C# 从代码入门 Mysql 数据库事务

隔离级别 脏读 不可重复读 幻读 未提交读 允许 允许 允许 提交读 不允许 允许 允许 可重复读 不允许 不允许 允许 串行化 不允许 不允许 不允许 其实也不必纠结这些问题,可以按照读写锁的情况来理解...当有一个线程 写 时,既不允许有其它线程同时在 写 ,也不允许其它线程同时在 读。也就是说,读 是可以并发的,但是写是独占的。 串行化: 当然对于数据库事务就复杂了很多。...如果要按照读写锁的形式去做,那么其隔离级别相当于 串行化,整个表都被锁住,不允许事务并发执行,此时不会有 脏读、不可重复读、 幻读 这些情况。...System.InvalidOperationException:“A TransactionScope must be disposed on the same thread that it was...System.InvalidOperationException: Transactions may not be nested. 所以,我们只能寄望于 TransactionScope。

18210
领券