小白学java

小白学java第48天

互斥锁:

        1.Java语言中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。

        2.每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。

        3.关键字synchronized来与对象的互斥锁联系。当某个对象用synchronized修饰时,表明该对象在任一时刻只能由一个线程访问

        4.同步的局限性:导致程序的执行效率要降低

        5.同步方法(非静态的)的锁可以是this,也可以是其他对象(要求是同一个对象)

        6.同步方法(静态的)的锁为当前类本身

·
注意事项和细节:

        1.同步方法如果没有使用static修饰:默认锁对象为this

        2.如果方法使用static修饰,默认锁对象:当前类.class

        3.实现的落地步骤:

                (1)需要先分析上锁的代码

                (2)选择同步代码块或同步方法

                (3)要求多个线程的锁对象为同一个即可

线程的死锁:

        多个线程都占用了对方的锁资源,但不肯相让,导致了死锁

释放锁:

下面操作会释放锁

        1.当前线程的同步方法、同步代码块执行结束

        2.当前线程在同步代码块、同步方法中遇到break、return

        3.当前线程在同步代码块、同步方法中出现了未处理的Error或Exception,导致异常结束

        4.当前线程在同步代码块、同步方法中执行了线程对象的wait()方法,当前线程暂停,并释放锁

下面操作不会释放锁:

        1.线程执行同步代码块或同步方法时,程序调用Thread.sleep()、Thread.yield()方法暂停当前线程的执行,不会释放锁

        2.线程执行同步代码块时,其他线程调用了该线程的suspend()方法将线程挂起,该线程不会释放锁 注意:不推荐使用suspend,resume来控制线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值