두 쓰레드 간에 인스턴스를 교환해주는 역할로 사용합니다. 예제를 통해서 알아보도록 하겠습니다. 메모리를 할당하는 A 쓰레드와 메모리를 해제하는 B 쓰레드가 있다고 할 때 A는 자신의 스택에 계속 데이터를 추가하고 쌓여있는 메모리를 해제하기 위해 A는 B와 스택을 교환하게 되고, 그러면 B는 교환 된 스택을 전부 비웁니다. public final static int MAX_STACK_CNT = 8; private Exchanger exchanger = new Exchanger(); class PushThread implements Runnable { LinkedList stack = new LinkedList(); private Scanner sc = new Scanner(System.in); public..
실행중인 쓰레드 내부 원하는 지점에서 대기를 걸어주고 CyclicBarrier 생성자의 파라미터로 넘겨준 값 만큼 await()을 호출하면 대기하고 있던 쓰레드들의 대기를 풀어주는 동작을 할 수 있습니다. private static final int THREAD_CNT = 5; private CyclicBarrier cyclicBarrier = new CyclicBarrier(THREAD_CNT); public class SleepThread implements Runnable { private int id = 0; private Random random = new Random(System.currentTimeMillis()); public SleepThread(int id) { this.id = id;..
백그라운드로 스레드가 돌아가고 있는 상황에서 해당 스레드가 종료 되기를 기다려야 하는 상황이 있을때 Thread 클래스의 join() 함수를 이용하면 됩니다. 그렇지만 하나가 아닌 여러 스레드들이 종료되기를 기다려야 하는 상황이 발생된다면 CountDownLatch를 고려할 수 있습니다. private static final int THREAD_CNT = 10; private CountDownLatch lacth = new CountDownLatch(THREAD_CNT); public class SleepThread implements Runnable { private int id = 0; private static Random random = new Random(System.currentTimeMill..
리소스에 접근할 수 있는 스레드의 수를 제한할 때 사용합니다. 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);..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.