技术文章 > java >  java基础 > 正文

java中锁的概念介绍

小妮浅浅

我们在学习进程或是多线程的时候,经常会说到线程安全的问题。那么保证其安全的方法,很常见的操作就是在其中用到了锁。这里很多人都见过锁,一般来说主要有synchronize和Lock。下面我们就锁的概念、作用、类型,以及不同类型的区别带来详解的介绍,一起往下看具体内容。

一、锁的概念及作用

锁主要用来实现资源共享的同步。只有获取到了锁才能访问该同步代码,否则等待其他线程使用结束释放锁。

二、锁的类型

这里主要针对:synchronize和Lock。

synchronize: 可以放在方法前面;也可以放在代码块前面,但需要指定上锁的对象。通常和wait,notify,notifyAll一块使用。wait:释放占有的对象锁,释放CPU。 sleep:则是释放CPU,但是不释放占有的对象锁。

notify:唤醒等待队列中的一个线程,使其获得锁进行访问。

notifyAll:唤醒等待队列中等待该对象锁的全部线程,让其竞争去获得锁。

Lock:拥有synchronize相同的语义,但是添加一些其他特性,如中断锁等候和定时锁等候,所以可以使用lock代替synchronize。提供的方法有:

lock():以阻塞式获取锁,没有获取到一直等待,不会被中断。

tryLock(): 获取一下,获取到就返回true,没获取到就返回false。

tryLock(long timeout,TimeUnit unit):获取到返回true,没获取到等待给定的时间,还没获取到就返回false。

lockInterruptibly() : 与lock类似,但是没有获取锁会进入到休眠状态,直到获得锁或者当前线程被别的线程中断。

三、两者的区别

性能不一致:资源竞争激励的情况下,lock性能会比synchronize好,竞争不激励的情况下,synchronize比lock性能好。

锁机制不一样:synchronize是在JVM层面实现的,系统会监控锁的释放与否。lock是代码实现的,需要手动释放,在finally块中释放。可以采用非阻塞的方式获取锁。

用法不一样:synchronize可以用在代码块上,方法上。lock通过代码实现,有更精确的线程语义。

以上就是java中锁的概念介绍,相信经过本篇的学习,下次在遇到线程安全类的问题,也能够明白其线程安全的原理,以及锁在其中发挥的作用了。

免费视频教程
本教程部分素材来源于网络,版权问题联系站长!
相关文章
  java中的new关键字是什么
  java中使用new实例化
  java迭代器iterator是什么意思
  java迭代器原理分析
  java中iterable是什么
  java中可变参数的内容介绍
相关视频章节
  什么是tkinter窗口
  例子3 登录窗口
  例子2 登录窗口
  例子1 登录窗口
  pack grid place 放置位置
作者信息

小妮浅浅

认证0级讲师

最近文章
python在协程中增加任务 443
python pyg2plot的原理 346
python中pyg2plot如何使用? 155
推荐视频
视频教程分类