1.synchronized与static synchronized 差异

      synchronized是对类的当前实例进行加锁,防止其它线程同一时候訪问该类的该实例的全部synchronized块,注意这里是“类的当前实例”, 类的两个不同实例就没有这样的约束了。那么static synchronized恰好就是要控制类的全部实例的訪问了。static synchronized是限制线程同一时候訪问jvm中该类的全部实例同一时候訪问相应的代码快。实际上,在类中某方法或某代码块中有 synchronized,那么在生成一个该类实例后,改类也就有一个监视快,放置线程并发訪问改实例synchronized保护快。而static
synchronized则是全部该类的实例公用一个监视快了。也也就是两个的差别了,也就是synchronized相当于 this.synchronized,而

static synchronized相当于Something.synchronized.

      一个日本作者-结成浩的《java多线程设计模式》有这种一个列子:

      pulbic class Something(){

         public synchronized void isSyncA(){}

         public synchronized void isSyncB(){}

         public static synchronized void cSyncA(){}

         public static synchronized void cSyncB(){}

     }

   那么,增加有Something类的两个实例a与b,那么下列组方法何以被1个以上线程同一时候訪问呢

   a.   x.isSyncA()与x.isSyncB()

   b.   x.isSyncA()与y.isSyncA()

   c.   x.cSyncA()与y.cSyncB()

   d.   x.isSyncA()与Something.cSyncA()

    这里,非常清楚的能够推断:

   a。都是对同一个实例的synchronized域訪问。因此不能被同一时候訪问

   b,是针对不同实例的,因此能够同一时候被訪问

   c。由于是static synchronized。所以不同实例之间仍然会被限制,相当于Something.isSyncA()与   Something.isSyncB()了,因此不能被同一时候訪问。

   那么,第d呢?。书上的 答案是能够被同一时候訪问的,答案理由是synchronzied的是实例方法与synchronzied的类方法因为锁定(lock)不同的原因。

个人分析也就是synchronized 与static synchronized 相当于两帮派,各自管各自,相互之间就无约束了。能够被同一时候訪问。眼下还不是分清楚java内部设计synchronzied是怎么样实现的。

结论:A: synchronized static是某个类的范围。synchronized static cSync{}防止多个线程同一时候訪问这个    类中的synchronized static 方法。

它能够对类的全部对象实例起作用。

  

               B: synchronized 是某实例的范围,synchronized isSync(){}防止多个线程同一时候訪问这个实例中的synchronized 方法。

2.synchronized方法与synchronized代码快的差别

      synchronized methods(){} 与synchronized(this){}之间没有什么差别。仅仅是
synchronized methods(){} 便于阅读理解,而synchronized(this){}能够更精确的控制冲突限制訪问区域。有时候表现更高效率。

3.synchronizedkeyword是不能继承的

     这个在http://www.learndiary.com/archives/diaries/2910.htm一文中看到的。我想这一点也是非常值得注意的。继承时子类的覆盖方法必须显示定义成synchronized

版权声明:本文博客原创文章。博客,未经同意,不得转载。

synchronized与static synchronized 差异的更多相关文章

  1. synchronized与static synchronized 的差别、synchronized在JVM底层的实现原理及Java多线程锁理解

    本Blog分为例如以下部分: 第一部分:synchronized与static synchronized 的差别 第二部分:JVM底层又是怎样实现synchronized的 第三部分:Java多线程锁 ...

  2. Synchronized和Static Synchronized区别

    通过分析这两个用法的分析,我们可以理解Java中锁的概念. 一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念), 一个是全局锁(该锁针对的是类,无论实例多少个对象,那么线 ...

  3. [Android Pro] synchronized与static synchronized 的区别

    reference to :  http://www.cnblogs.com/shipengzhi/articles/2223100.html 1.synchronized与static synchr ...

  4. synchronized和static synchronized的比较

    群里讨论的一个问题,网上别人已经贴出了很详细的说明,这里补充记录下,后面加入个人测试代码. 起因:1月份的时候看群里讨论一道问题,问题内容如下: 一个日本作者-结成浩的<java多线程设计模式& ...

  5. 浅析Java中synchronized与static synchronized

    synchronized关键字 synchronized是进行同步处理而保证线程安全.在一个方法中,如果是方法内的私有变量,那个这个变量是线程安全的,但是类中的实例变量是可能会出现线程安全问题的,当多 ...

  6. Java面试之synchronized 和 static synchronized

    ​面试题: 答案: 不能 不能 不能 不能 能 正文 概述 通过分析这两个用法的分析,我们可以理解java中锁的概念.一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念), ...

  7. 多线程同步锁和死锁以及synchronized与static synchronized 的区别

    线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序.简而言之:一个程序运行后至少有一个进程,一个进程 ...

  8. synchronized与static synchronized 的区别

    synchronized是对类的当前实例加锁,防止其他线程同时访问该类的该实例的synchronized块,这里的概念是“类的当前实例”,而static synchronized是对类的所有实例加锁, ...

  9. (转)Synchronized(对象锁)和Static Synchronized(类锁)的区别

    场景:面试的时候经常用得到! 1 综述 Synchronized和Static Synchronized区别 一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念),一个是全 ...

随机推荐

  1. python 入门学习---模块导入三种方式及中文凝视

    Python 有三种模块导入函数 1. 使用import 导入模块 import modname : 模块是指一个能够交互使用,或者从还有一Python 程序訪问的代码段.仅仅要导入了一个模块,就能够 ...

  2. www.centos.org

    https://www.centos.org/forums/viewtopic.php?t=5770 In order to conserve the limited bandwidth availa ...

  3. 你有PSD的学位吗? - dp的日志 - 网易博客

    你有PSD的学位吗? - dp的日志 - 网易博客 你有PSD的学位吗? 2011-08-01 12:58:40|  分类: 感悟 |  标签:自我提升   |字号 大中小 订阅       去年, ...

  4. Android getTopActivity的方法

    使用例如以下方法能够获得top activity 的name public String getTopActivityPackageName(Context context) { String top ...

  5. hdu1561(树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1561 题意:n座城堡,每个里面都有宝物,要求在你可以攻占m个城堡得到的最多的宝物,但是如果要攻破一个城 ...

  6. Cordova CLI源码分析(四)——创建工程

    在第一篇分析我们曾经举例,创建一个新工程, cordova create hello hellotest com.xxx.hellotest cli.js文件分析命令行参数后,会走到 else if  ...

  7. Android Ant打包笔记

    本文文档的下载地址(Word版):http://download.csdn.net/detail/yangwei19680827/7250711 Android Ant 打包 网上找了ant打包的资料 ...

  8. M3U8格式解说及实际应用分析

    M3U8有啥优点 ? 网上搜索了一下,大家众说纷纭,个人理解主要是能够做多码率的适配,依据网络带宽,client会选择一个适合自己码率的文件进行播放,保证视频流的流畅. 在IOS device和mac ...

  9. AspNetPager分页实际应用

    ---恢复内容开始--- 首先,这个分页是快速开发的一种,弊端就是一次查询数据库全部,然后分页显示. 注意: 1,最好绑定的数据是一个list格式! 1首先打开 http://www.webdiyer ...

  10. SQL Server,Access数据库查询易混点和C#中parameter指定参数长度的优缺点

    在学校的时候就经常做一些网站,所以这次在公司实习,组长第一次给了一个企业的网站还是很快的完成了.中间并没有遇到什么大的问题,但是还是遇到了两个新手非常容易混淆的小问题,所以拿出来跟大家分享一下. 主要 ...