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形式



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

目录
相关文章
|
8月前
总结 synchronized
总结 synchronized
31 0
|
4月前
|
存储 安全 Java
|
6月前
|
安全 算法 Java
synchronized 同步锁
Java中的synchronized关键字用于实现线程同步,可以修饰方法或代码块。 1. 修饰方法:当一个方法被synchronized修饰时,只有获得该方法的锁的线程才能执行该方法。其他线程需要等待锁的释放才能执行该方法。 2. 修饰代码块:当某个对象被synchronized修饰时,任何线程在执行该对象中被synchronized修饰的代码块时,必须先获得该对象的锁。其他线程需要等待锁的释放才能执行同步代码块。Java中的每个对象都有一个内置锁,当一个对象被synchronized修饰时,它的内置锁就起作用了。只有获得该锁的线程才能访问被synchronized修饰的代码段。使用synch
38 0
|
6月前
ReentrantLock和Synchronized简单比较
ReentrantLock和Synchronized简单比较
20 0
|
9月前
|
Java
synchronized的总结
synchronized的总结
synchronized的总结
|
9月前
|
前端开发 Java Spring
方法上加上 synchronized 就可以了么
方法上加上 synchronized 就可以了么
|
9月前
|
存储 缓存 安全
synchronized的简单理解
synchronized的简单理解
66 0
|
10月前
|
Java 编译器
10.关于synchronized的一切,我都写在这里了
大家好,我是王有志。我们已经完成了synchronized的学习,今天我们利用学习到的知识去回答一些关热点问题。
54 0
|
10月前
|
Java
07.synchronized都问啥?
大家好,我是王有志。经过JMM和锁的铺垫,今天我们正式进入synchronized的内容,来看看关于synchronized面试中都会问啥?
36 1
07.synchronized都问啥?
|
存储 缓存 安全
【Synchronized】
【Synchronized】
104 0
【Synchronized】