Java中的同步方法

一、Synchronized

Synchronized是JAVA中的关键字,是语言层面的互斥锁。它可以修饰以下对象:

  1. 修饰代码块,被修饰的代码块称为同步语句块,其作用范围即大括号{}括起来的代码,作用的对象是调用这个代码块的对象。保证最多只有一个线程能够允许该代码块。
  2. 修饰一个方法,被称为同步方法,作用范围为整个方法,作用的对象是调用这个代码块的对象。
  3. 修饰一个类,作用范围是整个类。作用的对象是该类所有实例。

二、ReentrantLock

ReentrantLock是API层面的互斥同步锁(悲观锁),该使用方法表现为各个线程抢占锁的形式。按照公平与否可以分为公平锁、非公平锁。

公平锁表现为谁等待的时间长,谁就先获取锁,顾名思义非公平锁则是一个随机获取过程,谁运气好,CPU时间寻到哪个线程哪个线程就能够获取锁。

最后都得释放锁。要注意造成死锁的情况。

三、原子类(CAS)

特点:高性能、(较于互斥同步锁)
缺点:只能够同步一个值。

  1. 关键字:Volaitile.作用保证变量的内存可见性 、禁止指令重排序。关于内存可见性在JAVA中的含义为:由于共享变量储存于主内存中,子线程中的本地变量所改变之后,无法及时更新到主内存从而出现线程使用共享变量的值时,该值不是最新的。使用Volatile关键字或者加锁既可以解决可见性问题。(注:为什么加锁后就保证了变量的内存可见性了? 因为当一个线程进入 synchronizer 代码块后,线程获取到锁,会清空本地内存,然后从主内存中拷贝共享变量的最新值到本地内存作为副本,执行代码,又将修改后的副本值刷新到主内存中,最后线程释放锁。
  2. 在编译器中,有时候会对于代码的一些先后顺序所进行改变。使用Volaitile关键字后则,禁止指令重排序。

Java中的同步方法相关推荐

  1. java 同步的方法_关于Java中的同步方法

    我有一个关于Java中方法同步的问题. 考虑一个具有3个同步方法的类. class MyClass{ public synchronized void methodA(){ ... } public ...

  2. Java中的Volatile如何工作? Java中的volatile关键字示例

    如何在Java中使用Volatile关键字 在Java采访中,什么是volatile变量以及何时在Java中使用volatile变量是Java 采访中一个著名的多线程采访问题 . 尽管许多程序员都知道 ...

  3. [转]关于java中的 sychronized 同步方法 与 同步块的理解

    首先,需要说明一点,也是最重要的一点,无论是同步方法 还是 同步块 都是只针对同一个对象的多线程而言的,只有同一个对象产生的多线程,才会考虑到 同步方法 或者是 同步块,如果定义多个实例的同步,可以考 ...

  4. Java中的锁原理、锁优化、CAS、AQS详解

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:景小财 www.jianshu.com/p/e674ee68 ...

  5. 图解Java中那18 把锁

    乐观锁和悲观锁 独占锁和共享锁 互斥锁和读写锁 公平锁和非公平锁 可重入锁 自旋锁 分段锁 锁升级(无锁|偏向锁|轻量级锁|重量级锁) 锁优化技术(锁粗化.锁消除) 乐观锁和悲观锁 悲观锁 悲观锁对应 ...

  6. java产生死锁的主要原因_详解java中产生死锁的原因及如何避免

    1. Java中导致死锁的原因 Java中死锁最简单的情况是,一个线程T1持有锁L1并且申请获得锁L2,而另一个线程T2持有锁L2并且申请获得锁L1,因为默认的锁申请操作都是阻塞的,所以线程T1和T2 ...

  7. Java中Synchronized的用法

    原文:http://blog.csdn.net/luoweifu/article/details/46613015 <编程思想之多线程与多进程(1)--以操作系统的角度述说线程与进程>一文 ...

  8. java中synchronized修饰静态方法和非静态方法有什么区别?

    Synchronized修饰非静态方法 Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称"对象锁". Java中每个对象都有一个锁,并且是唯一的.假设分 ...

  9. Java中Synchronized的用法(简单介绍)

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

最新文章

  1. PlanAhead工具应用
  2. 大数据与智能算法(二-应用级技术)-SMU在线学习笔记
  3. python3 json.dump乱码问题
  4. serverless 框架_Serverless计算这么强大
  5. 监督学习—最小二乘法
  6. 重复download CRM已经存在的parent equipment
  7. java包装类方法_Java包装类
  8. pythonjson数据提取_python爬虫学习笔记(十)-数据提取之JsonPath的使用
  9. 啪啪三国2获取服务器信息,啪啪三国2怎么快速的获得资源?
  10. puppet 认证错误:Could not request certificate: unknown message digest algorithm
  11. 条款28:避免返回handles指向对象内部的成分(Avoid returning handles to objects internals)...
  12. python程序基本结构总结图_一张图认识Python(附基本语法总结)
  13. Android性能优化典范-第2季
  14. Java基础视频教程(最适合初学者入门)
  15. CSS国际化loader - 国际化图片,中东区域适配
  16. 人脸识别 (4) 人脸对齐
  17. js内置对象及常用方法
  18. Java -- SQL注入
  19. Microsoft Mathematics(微软数学软件)
  20. 2021沭阳中学高考成绩查询,2021年沐阳县高考状元名单资料,今年沐阳县高考状元多少分...

热门文章

  1. 论文笔记-基于代码属性图和Bi-GRU的软件脆弱性检测方法
  2. 晶体三极管原理及应用
  3. 数字图像处理-常考算法代码-详细注释
  4. Haploview做单倍型分析
  5. 工具学习——有哪些好用的学术翻译工具
  6. python爬取网站源代码+图片
  7. NLP顶会近三年小众研究领域
  8. 折纸问题(规律题)(map的使用)
  9. Tridium niagara N4---报警告警信息点设置
  10. Linux命令之 jstack