기본 콘텐츠로 건너뛰기

자바 쓰레드 관련 정리

자바에서 쓰레드를 사용하는 건 참 쉽죠잉~. 쓰레드 관련 공부한 내용 정리합니다.

쓰레드란 ?  하나의 프로세스 안에서 실제적으로 작업을 처리하는 단위이다

main인 메솓를 실행하는 스레드가 기본적으로 존재한다.

join() 메소드 : 특정한 쓰레드가 실행 된 후에 다른 쓰레드가 실행되도록 제어하는 메소드이다. join()메솓를 호출한 스레드가 끝날때까지 다른 쓰레드는 대기한다.
(여담으로 이름으 join인 이유는, 예전에 프로세스를 fork=분기 해서 복사한 다음에 마칠때는 다같이 합쳐서=join해서 마친다는 의미로 해석하시면 이해하기 편합니다.

쓰레드의 우선 순위가 높으면 CPU를 더 많이 사용할 수 있다. 해야할 작업이 많은 쓰레드의 우선순위를 높여줌으로써 더 많은 작업을 하게 해준다. .setPriority() 메소드를 이용한다.

하나의 자원에 여러개의 쓰레드가 동시에 접근하지 못하도록 동기화 기능이 필요하다. 동기화는 메소드에 synchronized를 붙여서 메소드를 동기화 하는 방법과 클래스에서는 sychronized(this)와 같이 동기화 블럭을 사용하여 클래스 접근의 동기화를 해주는 두가지 방법이 있다.

동기화 기능에 더하여 제어권을 직접적으로 제어할 수 있다면 더 많은 작업을 할 수 있을것이다. 이 제어를 위한 메소드들이 wait(), notify(), notifyAll()이다. 이 메소드드들은 동기화 블럭 안에서만 사용할 수 있다. 참고로 Thread 클래스에서 제공되는 메소드가 아니라 Object 메소드에서 제공되는 메소드 이다. notify(), notifyAll()을 해주면 wait하던 쓰레드가 바로 Running이 되는건 아니고 Runnable상태가 되는 것이다.

Thread 클래스에서 내가 몰랐던 메소드들
void interrupt() : 쓰레드에 인터럽트 생성
void sleep(long millis) : 밀리초 동안 실행 정지
void yield() : 다른 쓰레드에게 CPU 양보

댓글

이 블로그의 인기 게시물

2017 암호경진대회 4번

가장 쉽게 풀었죠. 30분도 안걸렸던거 같네요. 프로그램을 통해서 암호문의 유효성이 검증되는데요, 역공학을 통해서 암호문을 쉽게 찾을 수 있습니다. 답안  : Snow White and the Seven Dwarfs!. 풀이  : Oracle 함수가  CRC 를 계산하기 위해서는 중간에 평문이 복구될 것으로 보였다 .  제공하는  dll 을 이용하여  Oracle 함수의 입력으로 암호문을 넣은 프로그램을 작성하였다 . IDA 와  Immunity Debugger 를 이용해 프로그램을 역공학하여 얻을 수 있었다 .