首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java并发编程之深入学习lock

Condition接口

简介:

可带条件的线程通知接口,需要用lock锁一起使用,实现比Object中线程通知方法更精细的控制。

Condition中的await()方法类似于Object的wait()方法。

Condition中的signal()方法类似于Object的notify()方法。

应用场景:

线程如果不满足某个Condition将被挂起,而等待中的线程如果满足某个Condition将被唤醒。

Lock接口

简介:

包中所有锁的接口,主要实现加锁,解锁,尝试锁定,等更细粒度的锁操作。

public interface Lock {

void lock();//锁定

void lockInterruptibly() throws InterruptedException; // 可中断

boolean tryLock();//尝试锁定

boolean tryLock(long time, TimeUnit unit) throws InterruptedException; //可中断尝试锁定

void unlock();//解锁

Condition newCondition();//返回条件对象

}

应用场景:

相比Synchronized,能更细粒度操作锁,比如可在代码段之间加锁; 可让阻塞线程中断; 可区分读写操作; 可以判断线程是否获取到锁等; 从而实现更优雅的同步方案。

ReadWriteLock接口

简介:

读写锁接口,通过分开的读锁与写锁,控制锁阻塞的范围,读锁之间不相互阻塞,提高程序执行效率。

如下源码所示:

public interface ReadWriteLock {

Lock readLock();

Lock writeLock();

}

LockSupport类

锁工具类,基本方法park和unpark。park会把使得当前线程阻塞,而unpark可以精确的控制放开某个线程的阻塞。

如下图所示:

public native void unpark(Thread jthread);

public native void park(boolean isAbsolute, long time);

AbstractOwnableSynchronizer类

简介:

基础的同步器虚拟类,可以由线程以独占方式拥有的同步器。此类为创建锁和相关同步器,提供了基础。

AbstractQueuedSynchronizer类

简介:

提供了一个先进先出队列作为存放等待线程的工具,然后这样每次拥有锁的线程完成后,直接唤醒下一个线程即可。

AbstractQueuedLongSynchronizer类

简介:

状态相关的参数和结果都定义为 long 而不是 int。其他与上面的类完全一致。

ReentrantLock类

简介:

可重入锁,即当一个线程已经获得一个lock的时候,该线程再次请求该锁的时候,会立即通过,不需要再锁定或等待。

ReentrantReadWriteLock类

简介:

ReentrantReadWriteLock同时事共享锁(读取锁)和独占锁(写入锁),是比较复杂的使用方式。

附图

concurrent包

感兴趣的小伙伴请关注本人公众号:暖爸的java家园

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200118A08APJ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券