Synchronized

简介: 作用:能够保证在同一时刻最多有一个线程执行该段代码,以保证并发的安全性。(当第一个线程去执行该段代码的时候就拿到锁,并独占这把锁,当方法执行结束或者一定条件后它才释放这把锁,在没释放锁之前,所有的线程处于等待状态)

作用:能够保证在同一时刻最多有一个线程执行该段代码,以保证并发的安全性。(当第一个线程去执行该段代码的时候就拿到锁,并独占这把锁,当方法执行结束或者一定条件后它才释放这把锁,在没释放锁之前,所有的线程处于等待状态)


不控制高并发的后果:



预期值本来是20000,但是没有控制并发,所以结果不一样


原因:


  i++,看上去知识一个操作,实际上包含了三个动作


  1,读取i


  2,将i加1


  3,将i的值写入到内存中


出现结果与预期不一样的原因是当执行完第一个线程的时候,可能第二个线程就进入执行,就被打断了,结果还没有写入到内存中,(当i为5,第一个线程进入方法,将i+1 ,结果i=6,但是还没有写入,第二个线程就进去,它读到的值不是6,而是5,因为第一个线程还没有将i写入内存),这样是线程不安全的


Synchronized的两种使用方法


第一种使用方法:对象锁


代码块形式:将关键字包裹方法体,this是锁,可以自己定义锁,可以定义多把锁Object object = new Object)




方法锁形式:


方法锁可以被多个对象拥有,他们之间互不影响,可以各自运行,也可以同时运行



第二种使用方法:类锁


用法和效果:类锁只能在同一时刻被一个对象拥有,而方法锁可以被多个对象拥有,他们之间互不影响,可以各自运行,也可以同时运行,而类锁只能是一个对象单独运行


类锁第一种形式:静态方法锁(Synchronized加在static方法上)


加了static





没有加static





当我们处理业务的时候,如果需要全局同步的时候,就可以使用静态方法锁,


类锁第二种形式:.class形式



使用了此代码块,所有的线程需要一个一个的排队访问

目录
相关文章
|
5月前
|
算法 Java 编译器
Synchronized你又知道多少?
Synchronized 是 JVM 实现的一种互斥同步机制,通过 monitorenter 和 monitorexit 指令控制对象锁的获取与释放。锁的本质是对象头的标记,确保同一时间只有一个线程访问资源。Synchronized 支持可重入性,允许方法内部调用其他同步方法而不阻塞。JVM 对锁进行了优化,引入了自旋锁、偏向锁、轻量级锁和重量级锁,以减少系统开销。Synchronized 属于悲观锁,而乐观锁基于 CAS(Compare and Swap)算法实现非阻塞同步,提高并发性能。
94 9
|
9月前
|
Java
synchronized
synchronized
50 2
|
9月前
|
存储 安全 Java
|
Java
07.synchronized都问啥?
大家好,我是王有志。经过JMM和锁的铺垫,今天我们正式进入synchronized的内容,来看看关于synchronized面试中都会问啥?
82 1
07.synchronized都问啥?
ReentrantLock和Synchronized简单比较
ReentrantLock和Synchronized简单比较
60 0
synchronized的总结
synchronized的总结
109 0
|
前端开发 Java Spring
方法上加上 synchronized 就可以了么
方法上加上 synchronized 就可以了么
|
存储 缓存 安全
synchronized的简单理解
synchronized的简单理解
117 0
|
Java 编译器
10.关于synchronized的一切,我都写在这里了
大家好,我是王有志。我们已经完成了synchronized的学习,今天我们利用学习到的知识去回答一些关热点问题。
115 0