洞察提升小程序标签管理,实现高效的金融行业数字化转型
1104
2022-10-15
LeetCode刷题之旅【多线程篇】简单 - 1:按序打印
2019年11月15日
题目
注意:
尽管输入中的数字似乎暗示了顺序,但是我们并不保证线程在操作系统中的调度顺序。
你看到的输入格式主要是为了确保测试的全面性。
解题1:CountDownLatch
class Foo { private CountDownLatch countDownLatchTwo = new CountDownLatch(1); private CountDownLatch countDownLatchThree = new CountDownLatch(1); public Foo() { } public void first(Runnable printFirst) throws InterruptedException { // printFirst.run() outputs "first". Do not change or remove this line. printFirst.run(); countDownLatchTwo.countDown(); } public void second(Runnable printSecond) throws InterruptedException { countDownLatchTwo.await(); // printSecond.run() outputs "second". Do not change or remove this line. printSecond.run(); countDownLatchThree.countDown(); } public void third(Runnable printThird) throws InterruptedException { countDownLatchThree.await(); // printThird.run() outputs "third". Do not change or remove this line. printThird.run(); }}
解题2
class Foo { private boolean firstFinished; private boolean secondFinished; private Object lock = new Object(); public Foo() { } public void first(Runnable printFirst) throws InterruptedException { synchronized (lock) { // printFirst.run() outputs "first". Do not change or remove this line. printFirst.run(); firstFinished = true; lock.notifyAll(); } } public void second(Runnable printSecond) throws InterruptedException { synchronized (lock) { while (!firstFinished) { lock.wait(); } // printSecond.run() outputs "second". Do not change or remove this line. printSecond.run(); secondFinished = true; lock.notifyAll(); } } public void third(Runnable printThird) throws InterruptedException { synchronized (lock) { while (!secondFinished) { lock.wait(); } // printThird.run() outputs "third". Do not change or remove this line. printThird.run(); } }}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~