Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Algorithm
- 머신러닝
- spring microservice
- Kotlin
- cloud native java
- MySQL
- Stress test
- devops
- ingress
- Spring
- 코틀린
- decorator 패턴
- 익명클래스
- Microservice
- ansible
- CRD
- 클라우드 네이티브 자바
- 마이크로서비스
- 헬름
- 자바
- Semaphore
- kubernetes
- cloud native
- 클라우드 네이티브
- 쿠버네티스
- MSA
- nGrinder
- Adapter 패턴
- 동기화
- java
Archives
- Today
- Total
카샤의 만개시기
동기화 클래스 1편 - 세마포어(Semaphore) 본문
리소스에 접근할 수 있는 스레드의 수를 제한할 때 사용합니다.
acquire()
메소드를 통하여 접근 권한을 퍼밋(Permit)받고, 남은 퍼밋이 없을 경우 퍼밋이 생기거나 인터럽트가 발생되거나 타임아웃이 걸리지 전까지 대기합니다.release()
메소드는 확보했던 퍼밋을 다시 세마포어에게 돌려주는 메소드입니다.
세마포어에 대해서 자세히 알고 싶다면 다음 글을 참고해주세요
세마포어(Semaphore)와 뮤텍스(Mutex)
class ShareResource {
private final Semaphore semaphore;
private final int MAX_PERMIT_CNT;
public ShareResource(int cnt) {
this.semaphore = new Semaphore(cnt);
this.MAX_PERMIT_CNT = cnt;
}
public void use() throws InterruptedException {
semaphore.acquire(); // 세마포어 리소스 확보
try {
doUse();
} finally {
semaphore.release(); // 세마포어 리소스 해제
}
}
protected void doUse() throws InterruptedException {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName() + " / Finish Time : " + System.currentTimeMillis() + " / available resource count = " + (MAX_PERMIT_CNT - semaphore.availablePermits()));
}
}
class UserThread extends Thread {
private final ShareResource resource;
public UserThread(ShareResource resource) {
this.resource = resource;
}
public void run() {
try {
while (true) {
resource.use();
Thread.sleep(5000);
}
} catch (InterruptedException e) {}
}
}
public class Main {
public static void main(String[] args) {
ShareResource resource = new ShareResource(3);
// 10개의 쓰레드가 실행되지만 동시에 리소스에 접근 할 수 있는 쓰레드는 총 3개
for (int i = 0;i < 10; i++) {
new UserThread(resource).start();
}
}
}
Next
'Java > POJO' 카테고리의 다른 글
동기화 클래스 3편 - CyclicBarrier (0) | 2019.07.03 |
---|---|
동기화 클래스 2편 - CountDownLatch (0) | 2019.07.03 |
Java의 동기화 (atomic, volatile, synchronized) (0) | 2019.07.03 |
OSGI에서 Jigsaw로 모듈 시스템 (0) | 2019.07.01 |
익명클래스 vs 람다 (0) | 2019.06.30 |
Comments