본문 바로가기

thread6

[Java] 쓰레드 8 - fork & join 프레임 워크 fork & join 프레임워크 이 프레임워크는 멀티쓰레드 프로그래밍을 구현하기 위해 하나의 작업을 작은 단위로 나눠서 여러 쓰레드가 동시에 처리하는 것을 쉽게 만들어준다. 수행할 작업에 따라 아래의 두 클래스 중에서 하나를 상속받아 구현한다. RecursiveAction : 반환값이 없는 작업을 구현할 때 사용 RecursiveTask : 반환값이 있는 작업을 구현할 때 사용 두 클래스 모두 compute()라는 추상 메서드를 가지고 있고, 이 추상 메서드를 구현하면 된다. 1) compute()에 작업을 수행하기 위한 코드 넣기 2) 쓰레드풀과 수행할 작업 생성 3) invoke()로 작업 시작. 쓰레드풀은 지정된 수의 쓰레드를 생성해서 미리 만들어 놓고 반복해서 재사용할 수 있게 한다. 쓰레드를 반.. 2022. 3. 14.
[Java] 쓰레드 6 - 쓰레드 동기화(synchronized , Lock, Condition) 쓰레드의 동기화 멀티쓰레드 프로세스의 경우 여러 쓰레드가 자원을 공유해서 작업하기 때문에 서로에게 영향을 줄 수 있다. 이러한 일을 방지하기 위해 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하도록 막는 것을 '쓰레드 동기화(Synchronization)'라고 한다. synchronized를 이용한 동기화 // 1. 메서드 전체를 임계 영역으로 지정 public synchronized void calcSum(){ // ... } // 2. 특정 영역을 임계 영역으로 지정 synchronized(객체의 참조변수){ // ... } 임계영역이란 둘 이상의 프로세스(쓰레드)가 공유 데이터에 접근하여 작업하는 코드 블록. 2022.01.05 - [CS/OS(운영체제)] - 동기화 툴(프로세스 동기화) .. 2022. 3. 14.
[Java] 쓰레드 5 - 쓰레드의 실행제어(sleep, interrupt, join, yield) 쓰레드의 스케줄링 관련 메서드 메서드 설 명 static void sleep(long millis) static void sleep(long millis, int nanos) 지정된 시간(천분의 1초 단위)동안 쓰레드를 일시정지시킨다. 지정한 시간이 지나고 나면, 자동적으로 다시 실행대기상태가 된다. void join() void join(long millis) void join(long millis, int nanos) 지정된 시간동안 쓰레드가 실행되도록 한다. 지정된 시간이 지나거나 작업이 종료되면 join()을 호출한 쓰레드로 다시 돌아와 실행을 계속한다. void interrupt() sleep()이나 join()에 의해 일시정지상태인 쓰레드를 깨워서 실행대기상태로 만든다. 해당 쓰레드에서는 In.. 2022. 3. 14.
[Java] 쓰레드 4 - 데몬 쓰레드(daemon thread) 데몬 쓰레드 데몬 쓰레드는 다른 일반 쓰레드의 작업을 돕는 보조적인 역할을 수행하는 쓰레드이다. 가비지 컬렉터, 워드프로세서의 자동저장, 화면자동갱신 등이 이에 속함 데몬 쓰레드는 무한루프와 조건문을 이용해서 실행 후 대기하고 있다가 특정 조건이 만족되면 작업을 수행하고 다시 대기하도록 작성한다. 데몬 쓰레드 설정방법 일반 쓰레드와 작성방법과 실행방법이 같음 쓰레드 생성 후 실행전에 setDaemon(true)를 호출해야함. boolean isDaemon() : 쓰레드가 데몬쓰레드인지 확인하여 boolean값 반환. void setDaemon(boolean on) : 쓰레드를 데몬 쓰레드로 또는 사용자 쓰레드로 변경. 매개변수 on의 값을 true로 지정하면 데몬 쓰레드가 된다. class ThreadE.. 2022. 3. 14.
[Java] 쓰레드 3 - 쓰레드 우선순위와 쓰레드 그룹 우선순위 지정 쓰레드는 우선순위를 통해 각 쓰레드 별 작업시간을 다르게 가지게 할 수 있다. void setPriority(int newPriority) : 쓰레드의 우선순위를 지정한 값으로 변경한다. void getPriority() : 쓰레드의 우선순위를 반환한다. public static final int MAX_PRIORITY = 10 // 최대우선순위 public static final int MIN_PRIORITY = 1 // 최소우선순위 public static final int NORM_PRIORITY = 5 // 보통우선순위 쓰레드가 가질 수 있는 우선순위 범위는 1~10이며 숫자가 높을수록 우선순위가 높다. 쓰레드의 우선순위는 쓰레드를 생성한 쓰레드로부터 상속받는다. main메서드를 수.. 2022. 3. 14.
[Java] 쓰레드 1 - 구현 및 실행(start, run) 프로세스와 쓰레드 프로세스란 '실행중인 프로그램'을 뜻한다. 프로그램을 실행하면 OS(운영체제)로부터 실행에 필요한 자원(메모리)를 할당받아 프로세스가 된다. 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있고, 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 쓰레드이다. 모든 프로세스는 하나 이상의 쓰레드가 존재하며, 둘 이상의 쓰레드를 가진 프로세스를 '멀티쓰레드 프로세스(muti-threaded process)'라고 한다. 멀티태스킹과 멀티쓰레딩 대부분의 OS는 멀티태스킹(다중작업)을 지원하기 때문에 여러 개의 프로세스가 동시에 실행될 수 있다. 이와 유사하게 멀티쓰레딩은 하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행하는 것이다. CP.. 2022. 3. 13.