Thread 5

wait(), notify()를 활용한 동기화

wait(), notify() 메소드를 활용한 동기화 프로그래밍리소스가 특정 조건에서 더 이상 유효하지 않은 경우 리소스를 기다리기 위해 스레드는 wait 상태가 된다wait 상태 스레드는 notify()가 호출될 때까지 기다린다유효한 자원이 생기면 notify()가 호출되고 wait 상태인 스레드들 중 무작위로 하나의 스레드를 재시작한다notifyAll()을 호출하면 wait 상태인 모든 스레드가 재시작 되고 자원을 갖기 위해 경쟁한다이 경우 유효한 리소스만큼의 스레드만이 실행되고 자원을 갖지 못한 나머지 스레드는 다시 wait 상태가 된다wait(), notify() 사용 예제도서관에서 책을 빌리고 반납하는 예제 코드다import java.util.ArrayList;class FastLibrary {..

Java 2024.08.29

멀티 Thread 동기화

critical section과 semaphorecritical section은 두 개 이상의 스레드가 동시에 접근하는 경우 문제가 생길 수 있기 때문에 동시에 접근할 수 없는 영역이다semaphore는 특별한 형태의 시스템 객체이며 get, release 두 개 기능이 있다한 순간에 하나의 스레드만 semaphore를 얻을 수 있고, 나머지 스레드들은 대기 상태가 된다semaphore를 얻은 스레드는 critical section에 접근할 수 있다동기화두 개의 스레드가 같은 객체에 접근할 경우, 동시에 접근해서 오류가 발생한다동기화는 임계영역에 접근한 경우 공유 자원을 lock 하여 다른 스레드의 접근을 제어한다동기화를 잘못 구현하면 데드락에 빠질 수 있다synchronized자바에서는 임계영역에 동시..

Java 2024.08.22

Thread 클래스의 여러 메소드

Thread 우선순위Thread.MIN_PRIORITY = 1 ~ Thread.MAX_PRIORITY = 10디폴트 값은 Thread.NORMAL_PRIORTY = 5우선순위가 높은 스레드가 CPU 배분을 받을 확률이 높다public class PriorityThread extends Thread { @Override public void run() { int sum = 0; Thread t = Thread.currentThread(); System.out.println(t + " start"); for (int i = 0; i 결과는 다음과 같다반드시 그런건 아니지만 우선순위가 높은 스레드들이 먼저 끝나는 것을 볼 수 있다join()동시에 두..

Java 2024.08.15

Thread 만들기

Thread프로세스실행 중인 프로그램이다.프로그램이 실행되면 운영체제로부터 메모리를 할당받아 프로세스가 된다스레드하나의 프로세스는 하나 이상의 스레드를 가진다.실제 작업을 수행하는 단위는 스레드다multi-thread여러 스레드가 동시에 수행되는 프로그래밍, 여러 작업이 동시에 실행되는 효과스레드는 자신만의 작업 공간을 가진다 (context)스레드 사이에서 공유하는 자원이 있다 (자바에서는 static instance)여러 스레드가 자원을 공유하는 경우, 서로 자원을 차지하려는 race condition이 발생할 수 있다여러 스레드가 경쟁하는 자원을 critical section이라고 한다critical section에 대한 동기화를 구현하지 않으면 오류가 발생할 수 있다Thread 만들기Thread ..

Java 2024.08.08

스레드

1. 프로세스와 스레드프로세스 vs 스레드프로세스: 운영체제로부터 자원을 할당받는 작업의 단위스레드: 프로세스가 할당받은 자원을 이용하는 실행 단위프로세스프로세스는 실행 중인 프로그램을 의미한다OS 위에서 실행되는 모든 프로그램은 OS가 만들어 준 프로세스에서 실행된다프로세스 구조OS가 프로그램 실행을 위한 프로세스를 할당해 줄 때 프로세스 안에서 Code, Data, 메모리 영역(Stack, Heap)을 할당해준다Code는 Java main 메소드와 같은 코드를 말한다Data는 프로그램이 실행 중 저장할 수 있는 저장공간을 의미한다전역변수, 정적 변수 등 초기화 된 데이터를 저장하는 공간Memory 메모리 영역Stack: 지역변수, 매개변수 리턴 변수를 저장하는 공간Heap: 프로그램이 동적으로 필요한..

Java 2024.05.20