Java并发编程:深入理解Synchronized的悲观并发策略

本文探讨了Java中的synchronized关键字,作为互斥锁确保数据同步。synchronized用于方法或代码块,保证同一时间只有一个线程访问。它具有可重入性,允许线程再次获取已持有的锁,防止死锁。不过,synchronized不具备公平性,线程获取锁的顺序不确定,且一旦等待,无法被中断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

互斥锁

我们知道volatile它不足以保证数据同步,那么就必须要引入锁来确保。互斥锁是最常见的同步手段,在并发过程中,当多条线程对同一个共享数据竞争时,它能保证共享数据同一时刻只能被一条线程使用,而其他线程只有等到锁释放后才能重新进行竞争。对于Java开发人员,我们最熟悉的肯定就是用synchronized关键词来完成锁功能。在涉及到多线程并发时,针对某些变量,你应该会毫不犹豫地加上synchronized去保证变量的同步性。

 

关于synchronized

在C/C++语言中,我们可以直接使用操作系统提供的互斥锁来实现同步。而Java语言则与之不同,Java需要把这些底层封装。Java提供的synchronized就是一个典型的互斥锁,同时它也是一个JVM级别的锁。它的实现细节全部封装在JVM中,对于开发人员只提供了synchronized关键词。根据锁的颗粒度,可以用synchronized对一个变量、一个方法、一个对象或一个类进行加锁。

 

锁范围

锁定范围要根据synchronized来确定。假如明确指定了锁对象,例如synchronized(变量)、synchronized(this)等,则说明加解锁对象为变量或运行时对象。假如没有明确指定对象,则根据synchronized修饰的方法去找对应的锁对象。如修饰一个非静态方法表示此方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值