○Thread
▷프로그래밍을 돕기 위해 동시에 독립적으로 실행되는 단위
▷process보다 가볍다. (한 Process는 여러 Thread를 가질 수 있다.
▶Thread 생성
▶1. Runnable Interface를 implement
▷public void run() 함수를 가지고 있다.
▷해당 함수가 종료되면, Thread는 종료된다.
▷만든 Runnable을 Thread의 생성자에 넣는다.
▷t.start() -> Thread 시작
▶Thread 상속
▷상속받은 class에서 run()을 정의한다.
▷해당 클래스의 객체를 만들고, start() -> 시작
▶Sleep - Thread.sleep(int ms)
▷Thread의 동작을 일시적으로 멈출 수 있다. (ms단위)
▶Interrupt - thread.interrupt()
▷해당 thread에서 interrupt 신호를 전달한다.
▷보통 thread를 종료시킬 때 자주 사용한다.
▶interrupt 동작 정의
▶catch (InterruptedException e)
▷interrupted하면 catch한다. (try ~ catch문)
▶thread.interrupted()
▷interrupt 당했다면 true, 아니면 false
▷if문에 넣어서 주로 체크한다.
▶Join - thread.join(int ms)
▷해당 thread가 끝날 때 까지 기다린다 (ms단위)
▷인자가 없거나, 0이라면 무한히 기다린다.
▷thread.isAlive()를 통해 살아있다면, join을 더 추가할수도 있다.
▶ReeentrantLock
▷import java.util.concurrent.locks.*
▷lock = new ReentrantLock()
▷Race Condition을 방지하기 위해 사용함.
▷Thread들은 한 Process에서 위치를 공유하기 때문에, 동시에 같은 변수/메소드를 참조하면 예상치 못한 결과가 일어날 수 있다.
▶lock(), unlock()
▷하나의 Thread가 bankLock.lock() 메서드를 호출하면, 다른 Thread는 lock()에 접근해도 unlock()되기 전까지 대기한다.
▷try 전에 lock을, finally에 unlock을 두고 try 내에 Critical section을 놓는다.
▶Condition Object
▷다른 쪽에서 signal을 보낼 때 까지 lock을 반환하고 대기할 수 있다.
▷condition = reentrantLock().newCondition()
▷condition.await() : signal을 받을 때 까지 대기한다.
▷condition.signalAll() : 모든 기다리는 Thread를 깨운다.
▷condition.signal() : 해당 condition를 깨운다.
▶synchronized
▷reentrantLock을 간단하게 표현 가능하다
▶ThreadLocal<T>
▷Thread는 위치를 공유하기 때문에, 같은 Thread Class는 변수들을 공유한다.
▷ThreadLocal<T> : Local 변수처럼 사용 가능
▶기타 메소드
▷Thread.currentThread() : 현재 Thread의 정보.
'컴퓨터 언어 > java' 카테고리의 다른 글
Network Programming (0) | 2020.12.08 |
---|---|
Stream (0) | 2020.12.01 |
Process (0) | 2020.11.23 |
Exception (0) | 2020.11.19 |
Lambda Expression (0) | 2020.11.16 |