쓰레드의 동기화(3): Lock과 Condition을 이용한 동기화
·
자바/프로세스와 쓰레드
1. Lock 클래스 - synchronized 블럭 외에도 'java.util.concurrent.locks' 패키지가 제공하는 lock 클래스들을 이용하는 방법이 있다. - synchronized 블럭으로 동기화를 하면 자동적으로 lock이 잠기고 풀리며 심지어 예외가 발생하여도 lock은 자동으로 풀린다. - 그러나, 같은 메서드 내에서만 lock을 걸 수 있다는 제약이 있어서 불편할 때가 있다. - 그럴 때 아래와 같은 lock 클래스의 종류 3가지를 사용한다. 클래스 설명 ReentrantLcok 재진입이 가능한 lock, 가장 일반적인 배타 lock ReentrantReadWriteLock 읽기에는 공유적이고, 쓰기에는 배타적인 lock StampedLock ReentrantReadWriteL..
쓰레드의 동기화(2): wait() & notify()
·
자바/프로세스와 쓰레드
1. wait()와 notify() - 동기화도 중요하지만, 특정 쓰레드가 객체의 락을 가진 상태로 오랜 시간을 보내지 않도록 하는 것 또한 중요하다. - 이러한 것을 구현하기 위해 wait()와 notify()가 등장하게 되었다. - CS을 수행하다가 작업을 더 이상 진행할 상황이 아니면 wait() 호출을 하여 L을 반납한다. ( 이때, 대기하고 있는 쓰레드는 객체의 대기실(waiting pool)에서 통지를 기다린다. ) - wait() 호출 후, 나중에 작업을 진행할 수 있는 상황이 되면 notify()를 호출해서 다시 L을 얻는다. ( notify()를 통해 통지를 waiting pool에 하면, 모든 쓰레드 중에서 임의의 쓰레드만 통지를 받는다. ) ( notifiyAll()은 기다리고 있는 ..
쓰레드의 동기화(1): Critical Section & Lock, snychronized
·
자바/프로세스와 쓰레드
1. Critical Section과 Lock - 싱글 쓰레드 프로세스의 경우 하나의 쓰레드가 자원을 가지고 작업하기 때문에 별 문제가 없지만, 멀티 쓰레드 프로세스의 경우 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 서로 영향을 주게 된다. - 쓰레드 A,B가 있다고 가정해보자. 쓰레드 A가 공유 데이터를 작업하는 도중 쓰레드 B가 제어권을 얻어 공유데이터를 변경하게 된다면, 사용자는 다른 결과를 얻게 될 것이다. - 이러한 일이 발생하는 것을 방지하기 위해서 한 쓰레드가 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해받지 않도록 하는 것이 필요하다. - 그래서 도입된 개념이 바로 Critical Section과 Lock이다. ( 앞으로 간단하게 부르기 위해 전자는 CS를 후자는 L이라고 지칭한..
소켓 프로그래밍: TCP와 UDP(4)
·
자바/네트워킹
1. UDP 소켓 프로그래밍 - TCP 소켓 프로그래밍에서는 Socket과 ServerSocket을 사용하지만, UDP 소켓 프로그래밍에서는 DatagramSocket과 DatagramPacket을 사용한다. - UDP는 비연결지향적인 프로토콜이라서 ServerSocket이 필요하지 않다. - DatagramSocket은 UDP의 소켓이며, 데이터를 DatagramPacket에 담아서 전송한다. - DatagramPacket은 헤더와 데이터로 구성되어 있으며, 보통 헤더는 수신할 호스트의 정보(호스트의 주소, 포트)가 저장되어 있다. 1-1. UDP 소켓 프로그래밍을 이해하기 위한 예제(1) ( 아래는 서버 프로그램이다. ) package Networking; import java.io.IOExcepti..