博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并发编程总结3——JUC-LOCK-1
阅读量:6819 次
发布时间:2019-06-26

本文共 1177 字,大约阅读时间需要 3 分钟。

根据锁的添加到Java中的时间,Java中的锁,可以分为"同步锁"和"JUC包中的锁"。
一、同步锁
即通过synchronized关键字来进行同步,实现对竞争资源的互斥访问的锁。Java 1.0版本中就已经支持同步锁了。
二、juc包中的锁
JUC包中的锁的功能更加强大,它为锁提供了一个框架。
01. Lock接口
  JUC包中的 Lock 接口支持那些语义不同(重入、公平等)的锁规则。所谓语义不同,是指锁可是有"公平机制的锁"、"非公平机制的锁"、"可重入的锁"等等。"公平机制"是指"不同线程获取锁的机制是公平的",而"非公平机制"则是指"不同线程获取锁的机制是非公平的","可重入的锁"是指同一个锁能够被一个线程多次获取。
 
02. ReadWriteLock
  ReadWriteLock 接口以和Lock类似的方式定义了一些读取者可以共享而写入者独占的锁。JUC包只有一个类实现了该接口,即 ReentrantReadWriteLock,因为它适用于大部分的标准用法上下文。但程序员可以创建自己的、适用于非标准要求的实现。
 
03.AQS
  AbstractQueuedSynchronizer就是被称之为AQS的类,它是一个非常有用的超类,可用来定义锁以及依赖于排队阻塞线程的其他同步器;ReentrantLock,ReentrantReadWriteLock,CountDownLatch,CyclicBarrier和Semaphore等这些类都是基于AQS类实现的。
 
04. LockSupport
  LockSupport提供“创建锁”和“其他同步类的基本线程阻塞原语”。 
  LockSupport的功能和"Thread中的Thread.suspend()和Thread.resume()有点类似",LockSupport中的park() 和 unpark() 的作用分别是阻塞线程和解除阻塞线程。但是park()和unpark()不会遇到“Thread.suspend 和 Thread.resume所可能引发的死锁”问题。
 
05. Condition
  Condition需要和Lock联合使用,它的作用是代替Object监视器方法,可以通过await(),signal()来休眠/唤醒线程。
Condition 接口描述了可能会与锁有关联的条件变量。这些变量在用法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个 Lock 可能与多个 Condition 对象关联。为了避免兼容性问题,Condition 方法的名称与对应的 Object 版本中的不同。
 

转载于:https://www.cnblogs.com/guoliangxie/p/6694642.html

你可能感兴趣的文章
JSP简单练习-使用JDOM创建xml文件
查看>>
iOS通过ASIHTTPRequest提交JSON数据
查看>>
PHP OO 编程笔记
查看>>
高级程序员职责
查看>>
setFocusable、setEnabled、setClickable区别
查看>>
分布系统概念与设计---系统模型
查看>>
核心基础以及Fragment与Activity传递数据完整示例
查看>>
解决网站出错后 跳转 友好页面 的 asp .net 配置
查看>>
【趣事】一根网线发起的攻击
查看>>
如何判断CapsLock键是否按下
查看>>
微软职位内部推荐-Software Development Engineer II
查看>>
在Ubuntu 14 上安装 Nginx-RTMP 流媒体服务器
查看>>
2015年4月与5月
查看>>
C++ 二叉树遍历实现
查看>>
分享一下刚刚HP电话面试。。。。。。。。我估计我挂了,不过还是要来分享一下...
查看>>
[mysql] linux下使用yum安装mysql
查看>>
Android异步处理系列文章四篇之四 AsyncTask的实现原理
查看>>
android-betterpickers
查看>>
linux -- Ubuntu开启root账户,并切换到root用户登陆
查看>>
直接插入排序法
查看>>