본문 바로가기

프로그래밍 언어/JAVA(자바) 응용73

72.wait(), notify() 메서드를 활용한 동기화 프로그래밍 wait() / notify()에서 메서드를 활용한 동기화 프로그래밍 - 리소스가 어떤 조건에서 더 이상 유효하지 않은 경우 리소스를 기다리기 위해 Thread가 wait()상태가 된다. - wait() 상태가 된 Thread은 notify()가 호출 될 때까지 기다린다. - 유효한 자원이 생기면 notify()가 호출되고 wait()하고 있는 Thread 중 무작위로 하나의 Thread를 재시작 하도록 한다. - notifyAll()이 호출되는 경우 wait() 하고 있는 모든 Thread가 재시작 된다. - 이 경우 유효한 리소스만큼의 Thread만이 수행될 수 있고 자원을 갖지 못한 Thread의 경우는 다시 wait() 상태로 만든다. - 자바에서는 notify() 메서드의 사용을 권장한다. - .. 2022. 6. 7.
71.멀티 Thread 프로그래밍에서의 동기화 critical section 과 semaphore - critical section은 두 개 이상의 thread가 동시에 접근하는 경우 문제가 생길 수 있기 때문에 동시에 접근할 수 없는 영역 - semaphore는 특별한 형태의 시스템 객체이며 get/release 두 개의 기능이 있다. - 한 순간 오직 하나의 thread 만이 semaphore를 얻을 수 있고, 나머지 thread들은 대기(blocking)상태가 된다. - semaphore를 얻은 thread만이 critical section에 들어갈 수 있다. - Park 과 ParkWife가 동시에 Bank 자원에 접근하여 작업이 이루어지는 경우의 예제 - SyncMain.java class Bank { private int money = 1.. 2022. 6. 7.
70.Thread 클래스의 여러 메서드들 Thread 우선순위 - Thread.MIN_PRIORITY(=1) ~ Thread.MAX_PRIORITY(=10) - 디폴트 우선순위 : Thread.NORMAL_PRIORITY(=5) - 우선순위가 높은 Thread가 CPU의 배분을 받을 확률이 높다 - setPriority()/getPriority() - Thread 우선순위 예제 - PriorityTest.java class PriorityThread extends Thread{ public void run() { int sum = 0; Thread t = Thread.currentThread(); System.out.println(t+"start"); for(int i = 0; i 2022. 6. 7.
69.자바에서 Thread 만들기 Thread란? - process 실행중인 프로그램이 실행되면 OS로부터 메모리를 할당받아 프로세스 상태가 됨 - thread하나의 프로세스는 하나 이상의 thread를 가지게 되고, 실제 작업을 수행하는 단위는 thread임 multi-threading - 여러 thread가 동시에 수행되는 프로그래밍, 여러 작업이 동시에 실행되는 효과 - thread는 각각 자신만의 작업 공간을 가짐 (context) - 각 thread 사이에서 공유하는 자원이 있을 수 있음 (자바에서는 static instance) - 여러 thread가 자원을 공유하여 작업이 수행되는 경우 서로 자원을 차지하려는 race condition이 발생할 수 있음 - 이렇게 여러 thread가 공유하는 자원중 경쟁이 발생하는 부분을 c.. 2022. 6. 7.