标签:acquire two three 做题 seam Semaphore 多线程 LeetCode first
题目:Foo类的三个方法会并发执行,确保first,second,third的执行顺序
解题思路:
1.信号量
每个 acquire() 方法阻塞,直到有一个许可证可以获得然后拿走一个许可证。
每个 release() 方法增加一个许可证,这可能会释放一个阻塞的 acquire() 方法。
class Foo {
private Semaphore seam_first_two = new Semaphore(0); // 同一时间只有0个线程能访问,意味着锁定 private Semaphore seam_two_three = new Semaphore(0); public Foo() { } public void first(Runnable printFirst) throws InterruptedException { // 没有阻塞,直接执行了
printFirst.run();
// 释放一个执行许可seam_first_two seam_first_two.release(); } public void second(Runnable printSecond) throws InterruptedException { // 需要等待seam_first_two释放 seam_first_two.acquire(); printSecond.run();
// 释放一个执行许可seam_two_three seam_two_three.release(); } public void third(Runnable printThird) throws InterruptedException { // 需要等待seam_two_three释放 seam_two_three.acquire(); printThird.run(); } }
标签:acquire,two,three,做题,seam,Semaphore,多线程,LeetCode,first 来源: https://www.cnblogs.com/liangwen/p/11776172.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。