关于同步代码块,同步方法和Lock锁实现线程同步和通信原理的简单理解

同步代码块实现线程同步和通信

线程同步是通过同步监视器实现的,也就是我们所说的,而同步监视器一般是共享资源。一个线程在访问共享资源的时候需要对其上锁,锁未释放前其他线程就不能访问该共享资源。例如:A线程对共享资源P进行操作期间会对其上锁,B线程要访问P却发现其是上锁的,故等待A释放锁后才能对其访问。
线程通信是通过调用Object类中定义和实现的的wait()和notify()或者notifyAll()方法实现的,因为同步监视器本身是new出来的某个类的一个对象,故可通过对象.方法调用这些通信方法。

同步方法实现线程同步和通信

线程同步也是通过同步监视器实现的,非静态同步方法的锁是当前调用该方法的this对象,静态同步方法的锁是静态方法拥有类的字节码文件对象,称为类对象,通过类名.class可以获得(关于什么是类对象请参考Java映射中的知识)。
线程通信同同步代码块中类似,通过**同步监视器.wait()或.notify()**调用。

Lock锁实现线程同步和通信

Lock锁创建一个锁对象,当一个线程在使用这把锁时,其他线程不能使用它,也就是说现在只有一把锁,想用锁的话必须等待锁空闲了才能用。Lock锁中没有同步监视器。每个线程在对共享资源进行操作时必须上锁,如果锁被占用了说明有一个线程正在访问共享资源,其他线程必须等待锁用完了后拿到锁才能对共享资源进行访问。上锁通过lock()方法,释放锁通过unlock()方法。通信时使用Condition对象的await()和signal()方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值