美文网首页
Synchronized总结

Synchronized总结

作者: 乔治m2 | 来源:发表于2019-06-12 14:04 被阅读0次

锁的类型

对象锁

  1. 同步代码块锁,所有的实例化对象各自带有一把锁(this)

    sychronized(this) {
        
    }
    
  2. 普通方法上带有synchronized修饰,默认使用本对象作为锁

    public synchronized void test() {
        
    }
    

类锁

  1. 静态方法锁(使用class唯一对象作为锁)

    public static synchronized test() {
        
    }
    
  2. 同步代码块,锁对象为.class对象

    synchronized(xxx.class) {
        
    }
    

多线程访问同步锁的七种情况

  1. 两个线程同时访问一个同步对象的同步方法

    答:串行执行方法,两个线程依次拿到当前同步方法的锁。

  2. 两个线程访问的是两个对象的同步方法

    答:分情况:如果两个对象使用的是类锁,那么是串行执行方法,如果两个对象的方法使用的是当前对象锁,那么并行执行方法。

  3. 两个线程访问的是synchronized的静态方法

    答:串行执行方法,由于是synchronized修饰的静态方法默认实现类锁,所有多线程执行为串行。

  4. 同时访问同步方法和非同步方法

    答:并行执行方法,由于非同步方法不受同步方法的限制,所以多线程执行方法的时候不会受到锁的影响。

  5. 同时访问一个对象的不同的普通同步方法

    答:串行执行方法,由于普通的同步方法默认使用本对象为锁,在者这里多线程访问的是同一个对象,所以锁是相同的,所以会串行执行方法。

  6. 同时访问静态synchronized和非静态的synchronized方法

    答: 并行执行方法,由于静态的synchronized使用本类作为锁,而非静态的synchronized使用本对象作为锁,锁不同,多线程执行的时候不会相互受到影响,所以并行执行方法。

  7. 方法抛出异常后会释放锁。

七种情况总结,3点核心思想

  1. 一把锁同时只能被一个线程获取,没有拿到锁的线程必须等待。
  2. 每个实例都应有自己的一把锁,不同实例之间互不影响;锁对象是*.class或者synchronized修饰的是static静态方法的时候,所有对象共用一把锁。
  3. 无论是方法正常结束或者抛出异常,都会释放锁。

使用注意点

  1. 锁对象不能为空。
  2. 作用域不宜过大。
  3. 避免死锁。

如何选择Lock和synchronized关键字

  1. 在程序中如果能不使用同步,就劲量不使用这两个关键字,优先选择java.util.concurrent包下的类。
  2. 能用synchronized解决的方法就劲量选择synchronized
  3. 如果需要Lock独有的特性的时候,才使用Lock.

相关文章

  • 值得保存的 synchronized 关键字总结(收藏)

    synchronized 关键字的总结 synchronized关键字最主要的三种使用方式的总结 修饰实例方法,作...

  • synchronized总结

    synchronized是Java中的关键字,是一种同步锁。 修饰一个代码块或方法 其作用的范围是大括号{}括起来...

  • Synchronized总结

    java中多线程中的同步机制会对资源进行加锁,保证在同一时间只有一个线程可以操作资源,避免多线程同时访问相同资源发...

  • Synchronized总结

    线程状态分析图 Synchronized的两种用法 对象锁:包括方法锁(默认对象锁为this当前实例对象)和同步代...

  • Synchronized总结

    一些原则 当两个并发线程访问同一个对象object中的这个synchronized(this)代码块或synchr...

  • Synchronized总结

    锁的类型 对象锁 同步代码块锁,所有的实例化对象各自带有一把锁(this)sychronized(this) { ...

  • synchronized总结

    synchronized是java语言中的关键字,可以用来修饰方法和代码块。被synchronized修饰的方法或...

  • Lock和synchronized的选择

    Lock和synchronized的选择 总结来说,Lock和synchronized有以下几点不同: 1)Loc...

  • synchronized初级使用篇

    此篇主要讲解使用synchronized时同步异步问题 抛出总结: 使用synchronized对资源(对象)进行...

  • java多线程之Lock和synchronized有不同

    总结来说,Lock和synchronized有以下几点不同: 1)Lock是一个接口,而synchronized是...

网友评论

      本文标题:Synchronized总结

      本文链接:https://www.haomeiwen.com/subject/joflfctx.html