synchronized关键字与Lock锁机制的区别问题

synchronized关键字与Lock锁机制的区别问题

在本人学习Java的过程中,遇到了很多形形色色的问题。当时琢磨了好久才琢磨出这样的总结,贴出来供大家参考参考。以下观点仅代表本人在学习过程中的观点,望大家能够共同讨论,查漏补缺。


在我之前的帖子中,提过关于线程同步安全的操作。我的做法是使用synchronized关键字或者是synchronized方法,又或者是使用Lock同步锁机制来进行线程同步安全的操作。

那么现在问题就来了,synchronized关键字跟我们的Lock同步锁机制又有什么区别呢?下面我将列出他们的区别:


1、
    同步代码块其实自身是具有自动上锁、自动解锁功能的

    Lock锁机制则是手动解锁,手动上锁的

2、 
    用synchronized修饰的同步代码块还有同步方法是有同步锁对象的

    Lock锁机制是没有同步锁对象的

3、
    因为synchronized修饰的同步代码块还有同步方法是具有锁对象的,因此,可以
    调用notify()、wait()、notifyAll()的方法


    但是因为Lock锁机制是不具有锁对象的,因此是不可以去调用notify()、wait()、
    notifyAll()方法的,否则会发生报错



那么如果Lock锁机制一定要使用等待唤醒机制的话,在Java5之后,我们只能通过创建一个Condition类对象,然后通过该对象来调用await()、signal()、signAll()方法,而这几个方法的作用跟notify()、wait()、notifyAll()是一样功能的



同时,我们需要注意的是,synchronized代码块、方法,其实自身是具有同步锁的,而这个同步锁,对于代码块而言,就是这个代码块所属的那个那个方法的对应的那个对象,对于方法而言,就是调用这个同步方法的那个对象

另外,我们要注意的是:
在同步代码块中,同步锁就是这个代码块所属的那个对象
在同步方法中(非静态),同步锁就是调用这个方法的那个对象
在同步方法中(静态),同步锁就是这个方法所属的这个类的字节码文件,即 类名.class;

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值