Lock和synchronized的区别

来源:互联网 发布:php关闭notice警告 编辑:程序博客网 时间:2024/06/06 08:38

synchronized并不陌生java关键字,锁,它可以用在方法锁,块锁,用它声明的变量也具有同样的性质,这里顺带提一下volatile

volatile和synchronized相似,它声明的对象具有可见性,单不具备原子性,因为volatile声明的变量只能获取到最后一次修改的记录,这是题外话,如果想了解synchronized和volatile的差异请点击synchronized和volatile的比较,下面进入正题

Lock是jdk1.5出现的并发包里面的东西,concurrent包,这个包提供了很多并发方法,Lock就是其中之一

Lock几乎可以实现所有synchronized能实现的功能,并且还有synchronized没有的方法,如锁投票,定时锁等候,可中断锁等候,Lock使用完要在finally里手动释放所,而synchronized由jvm自动释放

另外为什么要产生Lock

synchronized无法中断一个正在等候获得锁的线程

例如线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,如果使用synchronized ,A不释放,B将一直等下去,不能被中断。如果使用Lock,A不释放,可以使B在等待了足够长的时间以后中断等待

除此之外还有无法通过投票得到锁,如果不想等下去,也就没法得到锁 以及 同步还要求锁的释放只能在与获得锁所在的堆栈帧相同的堆栈帧中进行 等特性

在特别高的并发时候,synchronized的性能会下降数倍,但是如果并发未达到一定数量,个人不建议用Lock






原创粉丝点击