synchronized同步方法

1、“线程安全”与“非线程安全”:
非线程安全情况:多个线程对同一个对象中的实例变量进行并发访问时,产生脏读。
解决方法:对实例变量的值进行同步处理。

2、方法内的变量为线程安全

3、实例变量非线程安全
解决方法:在相应类中的方法前加关键字synchronized
两个线程访问同一个对象中的同步方法,一定是线程安全的。

4、synchronized取得的锁都是对象锁
线程如何取得对象锁:
多个线程访问同一个对象,哪个线程先执行带synchronized关键字的方法,哪个线程就持有该方法所属对象的锁Lock,其他线程等待状态。

5、A线程先持有对象的Lock锁,
1)B线程调用同一个对象中非synchronized类型方法:以异步方式调用;
2)B线程调用同一个对象中任意一个synchronized类型方法:需等待A线程释放对象锁后调用,也就是同步。

6、synchronized关键字声明的方法一定是排队运行的。
注意:只有共享资源的读写访问才需要同步化。

7、synchronized关键字具有锁重入功能
就是在使用synchronized关键字情况下,一个线程得到对象锁后,再次请求该对象锁时可以再次得到该对象的锁。
“可重入锁”:自己可以再次获取自己的内部锁。
当存在父子类继承关系时,子类完全可以通过“可重入锁”调用父类的同步方法。

8、同步不可以继承

来源:《Java多线程编程核心技术》

synchronized同步方法概述相关推荐

  1. java同步方法必须是静态的吗_Java基础知识之synchronized同步方法、代码块、静态方法、静态代码块的区别...

    Java中的同步块用synchronized标记,是同步在某个对象上,所有同步在一个对象上的同步块在同一时刻只能被一个线程进入并执行操作,其他等待进入该同步块的线程将被阻塞,直到执行该同步块中的线程退 ...

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

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

  3. 【转载】Java多线程编程2--同步锁定--synchronized同步方法、脏读、锁重入

        线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 1.方法内的变量为线程安全   "非线程安全"问题存在于"实例变量"中,如果是方法内 ...

  4. 从操作系统的PV操作理解JAVA的synchronized同步方法,同步代码块实现,及比较

    也有利于理解操作系统的同步 知识果然是息息相关的 JAVA同样离不开操作系统的原理,不过他体现在虚拟机JVM中 synchronized关键字是同步关键字 首先我们知道在操作系统里 PV两者操作信息量 ...

  5. 【Java线程安全】 synchronized同步方法、同步块:模拟抢票、模拟取款

    synchronized的使用 大佬之所以叫大佬,就是因为他们即使一次看不懂,看二十遍也要看懂,再对萌新说:这个方法不是挺简单的嘛 1.同步方法 要注意的是,synchronized锁的不是方法,而是 ...

  6. java多线程(二)——锁机制synchronized(同步方法)

    synchronized Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码.当两个并发线程访问同一个对象object中 ...

  7. synchronized同步方法

    『线程安全』与『非线程安全』是学习多线程技术时一定会遇到的经典问题.『非线程安全』其实当多个线程访问同一个对象中的成员变量时产生的,产生的后果就是『脏读』,就是取到的数据其实是被更改过的.而『线程安全 ...

  8. 【Java】什么是CAS、synchronized升级概述、偏向锁/轻量级锁详解 - 笔记

    引入 CAS lock cmpxchg在硬件层面实现:在操作过程中不允许被其他CPU打断,避免CAS在写数据的时候被其他线程打断,相比操作系统级别的锁,效率要高很多. 加锁才能让多线程的访问变为序列化 ...

  9. [转载] java synchronized静态同步方法与非静态同步方法,同步语句块

    参考链接: Java中的静态方法与实例方法 java synchronized静态同步方法与非静态同步方法,同步语句块 并发编程 线程同步 静态方法锁 非静态方法锁 同步块 进行多线程编程,同步控制是 ...

最新文章

  1. STM32 资料整理贴(更新到10年1月)[转]
  2. STL容器是否是线程安全的
  3. geotools读取shp文件及shp文件操作工具类代码
  4. SpringMVC_3.请求映射与静态资源处理
  5. ASP.NET Eval如何进行数据绑定
  6. linux查看tcp络连接日志,Linux监控TCP连接数并触发日志记录
  7. 简单的字谜游戏--可扩展--2015年7月25日14:58:00V1.1版
  8. RAC中如何更改对外网卡和内部互联网卡的配置、IP及VIP
  9. sql azure 语法_如何将SQL Server数据库备份到Microsoft Azure
  10. Jetty使用教程(四:24-27)—Jetty开发指南
  11. 框架实现修改功能的原理_从无到有RPC框架 - RPC原理及实现(文末还有开源的优秀RPC框架)...
  12. 最新mysql数据库源码编译安装。
  13. djangobook的旧版本代码,关于数据库
  14. 信度spss怎么做_怎么做信度分析的数据 spss数据分析
  15. pycharm双击打不开,无响应,下列第二种方法我亲测有效
  16. python学习笔记02-分支循环(图灵学院视频笔记)
  17. 数据结构与算法邓俊辉——(三)
  18. Proguard的Keep使用方法
  19. MySQL导入Excel表格
  20. 取消域服务器是定期修改密码,更改域服务器用户密码

热门文章

  1. 窄带物联网(NB-IoT)初步了解
  2. CSS 字体(font)实例
  3. HDFS DataNode 设计实现解析
  4. IE6,IE7 Firefox 兼容问题
  5. CC++中的qsort库函数
  6. Domino的压缩数据库的Load Compact命令
  7. r语言 运算符_R语言运算符
  8. python数值类型_Python数值类型
  9. 计算机网络中的传输协议是_计算机网络中的传输方式
  10. can收发器 rx_CANOpen系列教程03 _CAN收发器功能、原理及作用