Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。

1.什么场合使用

共享资源,在出现多个线程同时操作同一个资源的时候(一般是同一个对象),使用该关键字。

2.用法

1)方法定义上加synchronized关键字,如下

synchronized public method(){} 这是最常用的使用方法,默认锁当前对象,理解成同一个时间 ,只有一个线程能访问当前对象。

2)在代码块上使用,如下

synchronized (){

}

注:多个线程,访问类多个实例,这样会有多把锁,且互不干涉。如果出现竞争资源,且

不希望出现脏读的情况的话,可以把访问的方法变成类级别的(static) 然后加上synchronized 或者锁住当前类文件:

synchronized (class){

}

3.延伸

1)异步调用:同一个对象上,如果存在2个方法,方法A加了同步锁,方法B未加,此时如果有两个线程,线程1一个调用方法A,线程2调用方法B。

流程分析:线程1调用方法A,然后拿到了对象锁,线程B此时可以异步调用方法B,因为方法B未有锁。如果想同步操作,则需要在方法B加同步,因为一个对象只有一个监控锁。这叫做异步调用

2).锁重入

在synchronized修饰的方法里,可以直接调用synchronized修饰的方法,这是线程同步的,叫锁重入。同理,子类synchronized修饰的方法 可以调用父类synchronized修饰的方法。说明:一个线程在持有该对象的锁的时候依然可以重新获取这把锁

3).抱着锁的线程 发生异常,会释放锁,遇到异常一定要处理:

(1)记录日志继续执行 (2)直接回滚

java同步关键字_线程同步关键字之 synchronized相关推荐

  1. JAVA并发编程3_线程同步之synchronized关键字

    在上一篇博客里讲解了JAVA的线程的内存模型,见:JAVA并发编程2_线程安全&内存模型,接着上一篇提到的问题解决多线程共享资源的情况下的线程安全问题. 不安全线程分析 public clas ...

  2. 关于java线程同步的笔记_线程同步(JAVA笔记-线程基础篇)

    在多线程应用程序中经常会遇到线程同步的问题.比如:两个线程A.线程B可能会 "同时" 执行同一段代码,或修改同一个变量.而很多时候我们是不希望这样的. 这时候,就需要用到线程同步. ...

  3. java同步锁售票_线程同步锁之火车站售票案例

    前言: 谈到多线程,就不得不说线程同步,那么什么是线程同步? 线程同步 即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作 ...

  4. Java学习笔记18:Java_Map集合_HashMap集合_可变参数_Stream流_多线程_线程同步_生产者消费者

    文章目录 1.Map集合 1.1Map集合概述和特点[理解] 1.2Map集合的基本功能[应用] 1.3Map集合的获取功能[应用] 1.4Map集合的遍历(方式1)[应用] 1.5Map集合的遍历( ...

  5. Java并发编程之线程同步

    线程安全就是防止某个对象或者值在多个线程中被修改而导致的数据不一致问题,因此我们就需要通过同步机制保证在同一时刻只有一个线程能够访问到该对象或数据,修改数据完毕之后,再将最新数据同步到主存中,使得其他 ...

  6. Java的知识点31——线程同步

    线程同步--并发控制 并发:同一个对象多个线程同时操作 线程不安全: 数据有负数.相同 开辟多线程,每个线程都有自己的工作空间  与 主存 进行交互 /*** 线程不安全: 数据有负数.相同* @au ...

  7. java线程同步例子_JAVA线程同步实例教程

    线程是Java程序设计里非常重要的概念,本文就以实例形式对此加以详细解读.具体分析如下: 首先,线程加锁有什么用处呢?举个例子:比如你现在有30000块大洋在银行存着,现在你到银行取钱,当你输入密码完 ...

  8. java pv操作_理解同步的PV操作

    PV操作是Edsger Dijkstra提出的一种经典的解决同步不同执行线程的问题的方法,这种方法是基于一种叫信号量的特殊变量来实现的. 简单理解为就是通过共享变量+信号量实现的一种同步机制,其应用与 ...

  9. 生产者消费者伪码_[线程同步]生产者消费者代码实现

    生产者消费者问题是一个著名的线程同步问题,该问题描述如下: 有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者 ...

  10. java同步通信_java-线程-线程同步通信技术

    源代码如下 public class TranditionalThreadCommunication { /** * @param args */ public static void main(St ...

最新文章

  1. Java HashMap和Hashtable的区别
  2. bitbucket迁移
  3. Winform控件-DevExpress18下载安装注册以及在VS中使用
  4. 九度OJ 1437 To Fill or Not to Fill -- 贪心算法
  5. 把爬取信息导出到mysql,关于爬虫学习的一些小小记录(四)——爬取数据存入数据库...
  6. C#指南,重温基础,展望远方!(11)C#委托
  7. zedboard板子上呼吸灯的实现(第一版)
  8. LaTeX技巧:算法标题 Algorithm如何重命名
  9. SPSS 安装后不可用 没有出现授权 不显示工具栏 桌面没有快捷图标
  10. 万能地图下载器的不同授权在矢量地图下载功能上有哪些区别?
  11. 苹果电脑安装计算机一级,偷天换日!让普通笔记本安装苹果系统
  12. 仿剩余金额宝数字渐慢跳动效果
  13. 2019033期3d计算机开机号,3D历史120期开奖
  14. Revit平台盗版软件的陷阱与风险
  15. 如何编写一个程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。
  16. Algorithm:数学建模大赛(CUMCM/NPMCM)之NPMCM全国研究生数学建模竞赛(NPMCM)历年试题集合、试题库、学习网站推荐之详细攻略
  17. 6种根据IP地址获取相应城市信息的接口
  18. 运维学习(二):Linux服务器永久修改系统时间和时区方法
  19. AutoChain纷享车链背后的技术支撑——Higgs Chain 的生态体系解读
  20. ros 双wan配置_5G智慧路灯杆网关的双WAN口应用介绍

热门文章

  1. Unrecognized Windows Sockets error: 10106: create 的解决
  2. 手游联运系统入门知识
  3. 完美替代Windows任务计划程序 —— 定时执行专家
  4. H3C认证网络工程师H3CNE
  5. Ckeditor富文本编辑器的使用Smartupload文件上传
  6. Linux批量追加文件名后缀
  7. 团队任务5:事后诸葛亮会议
  8. 三国志战略版:官渡之战_新阵容解读_曹操
  9. 入侵大型网站的完整思路
  10. 【分享】翻出过去的一个多彩泡泡屏保特效(JS+CSS版)