synchronized用法解析

本文详细介绍了Java中synchronized的使用方式,包括同步代码块、对象锁、类锁、实例方法和静态方法的同步控制。强调了锁的对象是实例还是类的区别,并提醒开发者注意避免无谓的同步开销和潜在的死锁问题。
摘要由CSDN通过智能技术生成

多个线程执行对同一个Java对象访问时候,为了保证数据的有效性,通常会使用synchronized关键字,俗称多线程安全。

synchronized从语法上一共有三种语法,修饰静态方法,修饰实例方法,在方法中使用代码块。

从锁住的对象来看两种:锁住类和和实例对象。

锁住实例对象:无论多少个线程使用同一个实例对象,都需要排队。但是多个线程使用多个对象,就不用排队了。

锁住类:无论多少个对象,只要对象都是一个类,多个线程使用多个对象,依旧要排队。

注意:一定要检查对象是不是实例对象,局部/静态变量是无法锁住的。

在这里插入图片描述


使用同步代码块

synchronized (this) {}–对象锁

public void m1(){
   
        synchronized (this) {
   //这里的this锁住的是所在类的实例对象对象
			...................;
        }
}
//因为是对象锁。两个线程使用两个对象。就锁不住了。

Object obj = new Object(); synchronized(obj){…} 对象锁

	Object lock1=new Object();//实例对象,不能是局部变量
    public void m1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值