synchronized是怎样实现可见性,有序性,可重入性的?

简介: synchronized可见性,有序性,可重入性的

可见性:

  • 线程加锁前,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新读取最新的值。
  • 线程加锁后,其它线程无法获取主内存中的共享变量。
  • 线程解锁前,必须把共享变量的最新值刷新到主内存中。

有序性:

  • synchronized同步的代码块,具有排他性,一次只能被一个线程拥有,所以synchronized保证同一时刻,代码是单线程执行的。
  • 因为as-if-serial语义的存在,单线程的程序能保证最终结果是有序的,但是不保证不会指令重排。
  • 所以synchronized保证的有序是执行结果的有序性,而不是防止指令重排的有序性。

可重入性:

  • synchronized 是可重入锁,也就是说,允许一个线程二次请求自己持有对象锁的临界资源,这种情况称为可重入锁。
  • synchronized 锁对象的时候有个计数器,他会记录下线程获取锁的次数,在执行完对应的代码块之后,计数器就会-1,直到计数器清零,就释放锁了。
  • 之所以,是可重入的。是因为 synchronized 锁对象有个计数器,会随着线程获取锁后 +1 计数,当线程执行完毕后 -1,直到清零释放锁。
相关文章
|
6月前
|
安全 Java 开发者
探索Java内存模型:可见性、有序性和并发
在Java的并发编程领域中,内存模型扮演了至关重要的角色。本文旨在深入探讨Java内存模型的核心概念,包括可见性、有序性和它们对并发实践的影响。我们将通过具体示例和底层原理分析,揭示这些概念如何协同工作以确保跨线程操作的正确性,并指导开发者编写高效且线程安全的代码。
|
7月前
|
存储 缓存 Java
【Java并发基础】Java内存模型解决有序性和可见性
【Java并发基础】Java内存模型解决有序性和可见性
|
存储 缓存 SpringCloudAlibaba
JUC并发编程(一):Java内存模型(JMM)及三大特性:可见性、有序性、原子性
在当今高流量、高并发的互联网业务场景下,**并发编程技术**显得尤为重要,不管是哪一门编程语言,掌握并发编程技术是个人进阶的必经之路。时隔一个半月没有写技术博客文章,有点生疏了。。。闲话少叙,接下来我将围绕并发编程知识点进行总结讲解,这里从并发编程入门开始,讲述Java内存模型和并发的三大特性。
201 1
JUC并发编程(一):Java内存模型(JMM)及三大特性:可见性、有序性、原子性
|
8月前
|
缓存 安全 Java
多线程的三大特性:原子性、可见性和有序性
多线程的三大特性:原子性、可见性和有序性
171 1
|
8月前
|
缓存 安全 Java
3.线程安全之可见性、有序性、原子性是什么?
3.线程安全之可见性、有序性、原子性是什么?
78 0
3.线程安全之可见性、有序性、原子性是什么?
|
8月前
|
缓存 Java
13.synchronized总结:怎么保证可见性、有序性、原子性?
13.synchronized总结:怎么保证可见性、有序性、原子性?
123 0
13.synchronized总结:怎么保证可见性、有序性、原子性?
|
8月前
|
缓存 安全 Java
5.volatile是什么?怎么保证可见性?
5.volatile是什么?怎么保证可见性?
80 0
5.volatile是什么?怎么保证可见性?
|
存储 缓存 安全
JUC之可见性和有序性
JUC之可见性和有序性
|
缓存 Java
Java并发中的可见性和原子性
Java并发中的可见性和原子性
133 0
Java并发中的可见性和原子性
|
缓存 Java 编译器
并发编程(三)原子性&可见性&有序性
并发编程(三)原子性&可见性&有序性
126 0

热门文章

最新文章

下一篇
开通oss服务