Synchronized关键字

举报
别团等shy哥发育 发表于 2023/10/18 14:47:28 2023/10/18
【摘要】 Synchronized关键字每个Java对象都隐含有一把锁,这里称为Java内置锁(或者对象锁、隐式锁)。使用synchronized(syncObject)调用相当于获取syncObject的内置锁,所以可以使用内置锁对临界区代码段进行排他性保护。在多线程的环境下,多个线程同时访问共享资源会出现一些问题,而synchronized关键字是用来保证线程同步的,可以保证它修饰的方法或者代码...

Synchronized关键字

每个Java对象都隐含有一把锁,这里称为Java内置锁(或者对象锁、隐式锁)。使用synchronized(syncObject)调用相当于获取syncObject的内置锁,所以可以使用内置锁对临界区代码段进行排他性保护。

在多线程的环境下,多个线程同时访问共享资源会出现一些问题,而synchronized关键字是用来保证线程同步的,可以保证它修饰的方法或者代码块在任意时刻只能有一个线程执行。

synchronized关键字的三大特性如下:

  • 原子性:一个或多个操作要么全部执行成功,要么全部执行失败,synchronized关键字可以保证只有一个线程拿到锁,访问共享资源。
  • 可见性:当一个线程对共享变量进行修改后,其他线程可以立刻看到。执行synchronized时,会对应执行lock、unlock原子操作,保证可见性。
  • 有序性:程序的执行顺序会按照代码的先后顺序执行。

synchronized可以保证并发编程的三大特性:原子性、可见性、有序性,而volatile关键字只能保证可见性和有序性。

synchronized的作用范围如下:

  • synchronized作用于非静态方法时,锁住的是对象的实例,即this对象。
  • synchronized作用于静态方法时,锁住的是Class实例,因为静态方法属于Class而不属于对象。
  • synchronized作用于一个代码块时,锁住的是在所有代码块中配置的对象。

使用synchronized关键字所抢占的同步锁什么时候释放?

  • synchronized代码块或方法正确执行完毕,监视锁自动释放
  • 程序出现异常,非正常退出synchronized块,监视锁也会自动释放
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。