Leetcode Java Print in Order
업데이트:
문제
코드
class Foo {
private Semaphore semaphore;
public Foo() {
this.semaphore = new Semaphore(0);
}
public void first(Runnable printFirst) throws InterruptedException {
// printFirst.run() outputs "first". Do not change or remove this line.
printFirst.run();
this.semaphore.release();
}
public void second(Runnable printSecond) throws InterruptedException {
while (!this.semaphore.tryAcquire(1));
// printSecond.run() outputs "second". Do not change or remove this line.
printSecond.run();
this.semaphore.release(2);
}
public void third(Runnable printThird) throws InterruptedException {
while (!this.semaphore.tryAcquire(2));
// printThird.run() outputs "third". Do not change or remove this line.
printThird.run();
}
}
결과
설명
- 어떠한 순서의 호출이어도 first, second, third를 순차적으로 출력하는 Foo 클래스를 완성하는 문제이다.
- 생성자인 Foo()는 객체를 초기화한다.
- 메서드인 first(Runnable printFirst), second(Runnable printSecond), third(Runnable printThird)는 각 호출에 대해 Runnable로 구현된 파라미터를 수행한다.
-
전역 변수인 semaphore는 각 호출에 대한 잠금과 해제를 수행하기 위한 변수이다.
- 생성자인 Foo()를 정의한다.
- semaphore에 신규 Semaphore 객체를 공유 자원을 0으로 생성하여 넣어준다.
- 메서드인 first(Runnable printFirst)를 정의한다.
- printFirst을 수행하고 semaphore를 release하여 잠금 해제를 수행한다.
- 메서드인 second(Runnable printSecond)를 정의한다.
- semaphore에 first 메서드가 release 될 때 까지 기다려 다음 수행을 대기한다.
- printSecond을 수행하고 semaphore에 permits를 2로 release하여 잠금 해제를 수행한다.
- 메서드인 third(Runnable printThird)를 정의한다.
- semaphore에 second 메서드가 release 될 때 까지 기다려 다음 수행을 대기한다.
- printThird를 수행한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기