1.1论述

synchronized是java语言提供的锁机制的其中一种,其实现共享资源的同步。Synchronized使用时可以直接加载方法上或代码块中(括号表示需要锁的对象)。那么synchronized与static synchronized有什么区别呢?主要的区别如下:

  1. synchronized是对类的当前实例(当前对象)进行加锁,防止其他线程同时访问类的该实例的所有synchronized块,类的不同实例就没有这样的约束。
  2. static synchronized 防止多个线程中不同的实例对象(或者同一个实例对象)同时访问这个类中的static  synchronized 方法。它可以对类的所有对象实例起作用。
  3. 从jvm角度来看,某个方法或某个代码块中有synchronized,那么生成一个该类实例后,该实例也就有一个监视块,防止线程并发访问实例的synchronized保护块;而static synchronized则是所有该类的所有实例公用一个监视块。总而言之,synchronized相当于this.synchronized,static synchronized相当于Something.synchronized.

1.2例子

下面引用《java多线程设计模式》的例子代码。

  pulbic class Something()
{  public synchronized void isSyncA(){}  public synchronized void isSyncB(){}  public static synchronized void cSyncA(){}  public static synchronized void cSyncB(){}
}

以上代码,如果实现下面的调用,那么结果又会是怎样?

A. x.isSyncA()与x.isSyncB()

B. x.isSyncA()与y.isSyncA()

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

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

A:都是对同一个实例(x)的synchronized域访问,因此不能被同时访问。
B:是针对不同实例的(实例x和实例y),因此可以同时被访问(对象锁对于不同的对象  实例没有锁的约束)
C:因为是static synchronized,所以不同实例之间仍然会被限制,相当于Something.isSyncA()与 Something.isSyncB()了,因此不能被同时访问。
D:是可以被同时访问的,synchronized的是实例方法与synchronized的类方法由于锁定(lock)不同的原因。也就是说,synchronized和static synchronized 各自管理各自的互不影响。

区别:synchronized与static synchronized相关推荐

  1. synchronized(this)、synchronized(class)与synchronized(Object)的区别

    在多线程开发中,我们经常看到synchronized(this).synchronized(*.class)与synchronized(任意对象)这几种类型同步方法.但是是否知道这几种写法有什么区别了 ...

  2. synchronized(class)、synchronized(this)与synchronized(object)的区别分析

    JAVA中synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块.假如再细的分类,synchronized可作用于instance变量.objec ...

  3. synchronized 修饰static方法

    •1.依靠对象锁锁定 初始化一个对象时,自动有一个 对象锁. synchronized {普通方法}依靠对象锁工作,多线程访问synchronized方法,一旦某个进程抢得锁之后,其他的进程只有排队对 ...

  4. synchronized方法与synchronized代码块的区别

    2019独角兽企业重金招聘Python工程师标准>>> synchronized methods(){} 与synchronized(this){}之间没有什么区别,只是 synch ...

  5. java synchronized 原理_Java Synchronized的原理

    我们先通过反编译下面的代码来看看Synchronized是如何实现对代码块进行同步的: public classSynchronizedDemo{public voidmethod(){synchro ...

  6. 四、java多线程核心技术——synchronized同步方法与synchronized同步快

    一.synchronized同步方法 论:"线程安全"与"非线程安全"是多线程的经典问题.synchronized()方法就是解决非线程安全的. 1.方法内的变 ...

  7. java 静态方法枷锁_Java synchronized静态方法使用synchronized加锁

    昆明达内Java培训的老师上一期讲了Java synchronized实例方法使用synchronized加锁,这一期给同学们讲Java synchronized静态方法使用synchronized加 ...

  8. java synchronized boolean_java中synchronized关键字

    代码示例: package com.test; /* * x,y值为什么不能保持相同: * */ public class Pair implements Runnable{ boolean b = ...

  9. java synchronized 变量_Java Synchronized的用法

    synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码 ...

  10. java synchronized关键字_Java synchronized 关键字,你用的对吗?

    for (int i = 0; i < 5; i++) {System.out.println(Thread.currentThread.getName + " " + i) ...

最新文章

  1. 万字长文的Redis五种数据结构详解(理论+实战),建议收藏。
  2. [译]Spring Session 与 Spring Security
  3. 云服务器建站原理_云服务器cvm与建站主机之间的区别
  4. C# .net 对图片操作
  5. springboot指定注解扫描范围
  6. php上传文件损坏,PHP 上传文件故障排除
  7. Java8新特性:Stream介绍和总结
  8. ss模型复模态的物理意义及adams复模态振型求解
  9. ASP.NET---- Microsoft .NET Pet Shop 3.x(-)
  10. 36岁程序员:领导平时称兄道弟,裁员时立刻变脸,看透人性
  11. 剑指offer——面试题51:数组中重复的数字
  12. iOS程序员自述,从月入10k到年薪百万,移动架构师如何养成的?
  13. 谷歌插件firebug和xpath下载,并解决包括拖拽无法安装、提示“组件无法安装 未通过验证”等问题
  14. Hive DDL 数据定义语言
  15. python 因子分析 权重计算方法_如何使用Python(scikit-learn)计算FactorAnalysis得分?
  16. 年底个人安全注意事项
  17. SQL Server 获取2019年节假日列表(可用于Java、.Net系统实现)
  18. org.hibernate.MappingException: Unknown entity常见问题(新手需注意)
  19. 没学历,当程序员还有机会吗?
  20. 消息队列RabbitMQ基本使用(Java代码实现)

热门文章

  1. Python内置函数(10)——float
  2. 现在输入 n 个数字, 以逗号, 分开; 然后可选择升或者 降序排序;
  3. Android开发——常见的内存泄漏以及解决方案(二)
  4. js常用几种类方法实现
  5. Gentoo解决Windows双系统时间不同步的问题
  6. petshop4.0 详解之五(PetShop之业务逻辑层设计)(转帖)
  7. DHCP中继原理和配置(含常见配置配置误区)
  8. opencv笔记(7):直方图均衡化
  9. dnSpy - 一款 .NET 程序逆向工具
  10. ALEIYE 2.0发布 首创RET关键事件功能