Java多线程入门7-线程同步锁机制sysnchronized和Lock

本文介绍了Java多线程中遇到的同步问题,详细讲解了synchronized关键字的两种用法以及其作为自动锁的特性。此外,还探讨了从JDK5.0开始引入的Lock接口,特别是ReentrantLock类,对比了Lock与synchronized在使用上的区别和性能优势。
摘要由CSDN通过智能技术生成

一、同步问题

  使用多线程,不可避免会碰上同个资源争抢的问题,即线程同步问题。比如节假日的抢票,多个人同时申请买票时,都会让票数减一,如何确保票数正确,不会发生超卖问题?答案是等待,虽然是同步请求,但后台同一时刻只处理一个请求,其它请求等待,就能确保争抢资源——票数正确。

  同样的,线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用。

  为了确保每次只有一个线程处理,可以使用锁机制,每个正在处理的线程都持有对象的锁,处理完之后再释放锁。没有持有锁的线程,继续等待。

二、sysnchronized

  线程同步锁之一是sysnchronized关键字。它有两种用法:

  1、syschronized方法。直接在需要同步的方法上加个syschronized关键字,就能达到同步的目的。有时候如果将整个大方法都声明为syschronized同步的话,将会影响效率。这时候可以使用syschronized块的方法。

  2、syschronized块。syschronized(Obj){(需要同步执行的代码)},Obj可以是任何对象,推荐是使用共享资源,比如抢票中的火车票数量这个对象。

  同步方法中无需指定同步对象,因为同步方法的同步对象就是this,也就是调用该方法的对象本身。

  syschronized可以理解为是一种自动上锁解锁的机制,它无需程序员自己控制上锁解锁动作,全自动完成。

三、Loc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值