JUC同步工具

1 Reentrantlock可重入锁
图片说明
特点:
1 Trylock(5,TimeUnit.SECONDS)五秒钟没拿到锁,会继续执行下续代码
2 lockinterruptibly 可以用interrupt打断线程的等待
3 公平锁Rerntrantlock lock = new Reentrantlock(true);synchronized只有非公平锁
4 CAS

2 Countdownlatch(门栓)
基于AQS的共享模式
countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了
CountDownLatch(int count); //构造方法,创建一个值为count 的计数器。
await();//阻塞当前线程,将当前线程加入阻塞队列。
await(long timeout, TimeUnit unit);//在timeout的时间之内阻塞当前线程,时间一过则当前线程可以执行,
countDown();//对计数器进行递减1操作,当计数器递减至0时,当前线程会去唤醒阻塞队列里的所有线程。

3 Cyclicbarrier(线程栅栏)
图片说明
await()方法的底层是调用重入锁的lock方法。
基于condition
实现一组线程相互等待,当所有线程都到达某个屏障点后再进行后续的操作。下图演示了这一过程。
在CyclicBarrier类的内部有一个计数器,每个线程在到达屏障点的时候都会调用await方法将自己阻塞,此时计数器会减1,当计数器减为0的时候所有因调用await方法而被阻塞的线程将被唤醒

4 Phaser
多层线程栅栏

5 Readwritelock读写锁
Reentrantreadwritelock lock = new Reentrantreadwritelock();
Lock readlock = lock.readlock();
Lock writelock = lock. writelock();

6 StampedLock读写锁
三种模式是:
(1)write
方法writeLock()可能阻止等待独占访问,返回可以在方法unlockWrite(long)中使用的stamps来释放锁定。
不定时的和定时版本tryWriteLock,还提供当锁保持写入模式时,不能获得读取锁定,并且所有乐观读取验证都将失败。
(2)read
方法readLock()可能阻止等待非独占访问,返回可用于方法unlockRead(long)释放锁的戳记。
还提供不定时的和定时版本tryReadLock。
(3)乐观读
方法tryOptimisticRead()只有当锁当前未保持在写入模式时才返回非零标记。
方法validate(long)返回true,如果在获取给定的stamps时尚未在写入模式中获取锁定
这种模式可以被认为是一个非常弱的版本的读锁,可以随时由 writer 打破
对简单的只读代码段使用乐观模式通常会减少争用并提高吞吐量。
然而,其使用本质上是脆弱的。 乐观阅读部分只能读取字段并将其保存在局部变量中,以供后验证使用。
以乐观模式读取的字段可能会非常不一致,因此只有在熟悉数据表示以检查一致性和/或重复调用方法validate()时,使用情况才适用。
StampedLock stampedlock = new StampedLock();
stampedlock.asReadLock().Lock();
stampedlock.asReadLock().unlock();
stampedlock.asWriteLock().lock();
stampedlock.asWriteLock().unlock();

7 Semaphore(信号灯)
底层AQS(抽象同步队列)
限流,最多允许有多少个线程同时执行
Semaphore semaphore = new Semaphore(1);一个信号灯
semaphore.acquire();获得信号灯
semaphore.release();释放信号灯

8 exchanger
两个线程,exchange阻塞命令,值交换之后继续执行
图片说明

9 LockSupport
Locksupport.park();线程阻塞
Locksupport.unpark(t);线程t退出阻塞状态
Unpark可以在park之前

全部评论

相关推荐

避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务