java多线程笔记(2)——关于synchronized关键字一些注意事项

本文详细介绍了Java中synchronized关键字的用途及其应用场景。synchronized可以用于方法级别或代码块级别,确保线程安全并防止多线程环境下的并发访问冲突。

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

synchronized关键字的作用域有两种:

一、在某个对象的实例内,synchronized对实例方法的作用,它可以防止多个线程同时访问同一对象的synchronized方法;
二、类的static方法上进行修饰,可以防止多个线程访问这个类的同步静态方法。


同步代码块中的做用对象应当是当前实例对象。
synchronized关键字不能继承,也就是说,如果基类的某个方法被synchronized所修饰,那么子类的该方法并不会继承synchronized关键字。
总结一下就是:synchronized关键字可以作为方法的修饰符,同时,也可以作为方法内部语句的修饰符,当然也可以直接作为同步代码块的修饰符。当然无论如何,synchronized取得的锁永远都是对象,而不可能将一段代码作为锁;每个对象只有一个锁;同步会产生极大的系统开销,使用不当还有可能发生死锁,所以如非必要,尽量不要使用同步机制。


不同场景下使用synchronized关键字:
1. 在对象方法上,此时锁定的对象是调用该方法的实例对象,它等同于在方法内部使用

synchronized(this){
//同步代码块
}

此时的this指代的就是调用该方法的对象。
2. synchronized作用于静态方法,它锁定的是该类,以免多线程同时调用该方法,等同于在静态方法内部使用

synchronized(className.class){
//className表示当前类名
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值