synchronized的作用

synchronized是java中的一个关键字,也就是说是Java语言内置的特性。

如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况:

1、获取锁的线程执行完了该代码块,然后线程释放对锁的占有;

2、线程执行发生异常,此时JVM会让线程自动释放锁。

不足

如果这个获取锁的线程由于要等待IO或者其他原因(比如调用sleep方法)被阻塞了,但是又没有释放锁,其他线程便只能干巴巴地等待,试想一下,这多么影响程序执行效率。

总结

synchronized是Java语言的关键字,因此是内置特性采用synchronized不需要用户去手动释放锁,当synchronized方法或者synchronized代码块执行完之后,系统会自动让线程释放对锁的占用。

原文参考:https://www.cnblogs.com/dolphin0520/p/3923167.html

转载于:https://www.cnblogs.com/gaoqiao/p/10971927.html

synchronized的作用以及不足相关推荐

  1. Synchronized的两个用法

    Synchronized的作用: 能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果 Synchronized的两个用法: 1)对象锁 包括方法锁(默认锁对象为this当前实例对 ...

  2. c#中volatile关键字的作用

    恐怕比较一下volatile和synchronized的不同是最容易解释清楚的.volatile是变量修饰符,而synchronized则作用于一段代码或方法:看如下三句get代码: int i1;  ...

  3. java中synchronized介绍和用法

    synchronized的作用 一句话说出synchronized的作用:  能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全效果. 大概意思: 当多个线程同时访问synchroni ...

  4. iOS 线程安全之@synchronized的用法

    @synchronized(self)的用法: @synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改.这个是objective-c的一个锁定令牌,防止self ...

  5. 对java多线程里Synchronized的思考

    Synchronized这个关键字在多线程里经常会出现,哪怕做到架构师级别了,在考虑并发分流时,也经常会用到它.在本文里,将通过一些代码实验来验证它究竟是"锁"什么. 在启动多个线 ...

  6. java中关键字volatile的作用(转载)

    转载:http://blog.csdn.net/orzorz/article/details/4319055 用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对 ...

  7. Java并发:明白Synchronized实现原理,锁什么?

    最近看到synchronized的知识点,做些简单记录. 一.Synchronized的基本使用 Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法.Synchr ...

  8. java同步机制:synchronized

    在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行.synchronized既可以加在一段代码上,也可以加在 ...

  9. Java多线程闲聊(六):synchronized关键字

    Java多线程闲聊(六):synchronized关键字 前言 这篇文章我会在博客置顶,为什么呢?因为,三篇引用的文章写得太好了,我害怕后面找不到,看不到,然后忘了! 让我想想,感觉昨天的前言把最近肚 ...

  10. 【Java并发系列04】线程锁synchronized和Lock和volatile和Condition

    一.前言 多线程怎么防止竞争资源,即防止对同一资源进行并发操作,那就是使用加锁机制.这是Java并发编程中必须要理解的一个知识点.其实使用起来还是比较简单,但是一定要理解. 有几个概念一定要牢记: 加 ...

最新文章

  1. IIS7 配置PHP服务器
  2. 使用Numpy实现PCA
  3. linux mysql 5.6.22_linux下MySQL5.6.2安装过程
  4. lisp 计算三点的夹角_已知三点坐标求夹角 - 程序语言 - 小木虫 - 学术 科研 互动社区...
  5. python3 mysql报警日志_Python监听MySQL日志
  6. 解决GitLab中使用SSH的git clone总是提示输入密码且任何密码都不对
  7. P2371-[国家集训队]墨墨的等式【同余最短路】
  8. win10远程桌面连接凭据怎么设置_想在家办公,只需打开win10远程桌面连接就可以了,还犹豫什么...
  9. 学习FFmpeg API – 解码视频
  10. 由古书看,古人应该知道地球是圆的
  11. 怎么把手机字体改成繁体_如何把手机字体变成繁体 繁体字转换器
  12. Pycharm工具下的数据可视化(图形绘制)
  13. asp.netcore 关于静态文件的访问权限控制(UseStaticFiles)
  14. 什么是高匿代理、匿名代理和透明代理?它们有什么区别?
  15. div中的内容居中对齐
  16. 泸州职业技术学院计算机单招试题,2021年泸州职业技术学院单招语文考试模拟试题库...
  17. sas数据操作update、modify by ke=、控制modify的更新、datasets添加约束条件、操作文件变动aduit trail...
  18. 行业分析-全球与中国旋转喷淋球市场现状及未来发展趋势
  19. CCPC-Wannafly Winter Camp Day8 (Div2, onsite)
  20. 他,用了8年,从程序员到CTO再到天使投资人蝶变记

热门文章

  1. 构建之法1,5,17章学习心得
  2. 《深入理解计算机系统》家庭作业
  3. 一个简单的C#委托小例子
  4. flex知識:container of spark
  5. 从零基础入门Tensorflow2.0 ----八、39.3. gpu3
  6. 从零基础入门Tensorflow2.0 ----三、11. tf.GradientTape与tf.keras结合使用
  7. python读取HDF5数据
  8. linux设置服务开机自启动
  9. Java环境安装及环境变量的配置
  10. ArcGIS 创建格网与图斑数据叠加;频数统计与面积比例计算