zoukankan      html  css  js  c++  java
  • Synchronized和Static Synchronized区别

    通过分析这两个用法的分析,我们可以理解Java中锁的概念。

    一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念),

    一个是全局锁(该锁针对的是类,无论实例多少个对象,那么线程都共享该锁)。

    实例锁对应的就是synchronized关键字,而类锁(全局锁)对应的就是static synchronized

    (或者是锁在该类的class或者classloader对象上)。下面的文章做了很好的总结:

     

    1.synchronized与static synchronized 的区别       

    synchronized是对类的当前实例(当前对象)进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块,注意这里是“类的当前实例”, 类的两个不同实例就没有这种约束了。

    那么static synchronized恰好就是要控制类的所有实例的并发访问,

    static synchronized是限制多线程中该类的所有实例同时访问jvm中该类所对应的代码块。

    实际上,在类中如果某方法或某代码块中有 synchronized,那么在生成一个该类实例后,该实例也就有一个监视块,

    防止线程并发访问该实例的synchronized保护块,而static synchronized则是所有该类的所有实例公用得一个监视块,

    这就是他们两个的区别。也就是说synchronized相当于  this.synchronized,

    而static synchronized相当于Something.synchronized.(后面又讲解)

  • 相关阅读:
    redis 实例
    redis 常用命令
    redis sets类型及操作
    简单说说PHP优化那些事
    C# IEnumerable与IQueryable ,IEnumerable与IList ,LINQ理解Var和IEnumerable
    全文搜索引擎 elasticsearch.net
    .net 异步
    并行开发 8.用VS性能向导解剖你的程序
    并行开发 7.简要分析任务与线程池
    并行开发 6.异步编程模型
  • 原文地址:https://www.cnblogs.com/cuijinlong/p/6244855.html
Copyright © 2011-2022 走看看