자바 스레드 종료 생성 동기화 join() wait() sleep()

1. 프로세스(process)

 

1) OS (Operating System)는 동시에 여러 개의 프로그램이 실행된다.

2) process

    – 프로그램이 실행 중인 상태를 말한다.

    – 프로그램이 실행 되면 OS로부터 메모리를 할당받아 프로세스 상태가 된다.

2. 스레드(Thread)

 

1) 하나의 프로세스는 하나 이상의 thread를 가지게 된다.

2) 실제 작업(task)을 수행하는 단위는 thread이다.


3. 멀티 스레딩(Multi-Threading)

 

1) 여러 thread가 동시에 수행되는 프로그래밍을 말한다.

2) 여러 작업(task)이 동시에 실행되는 효과가 있다.

3) thread는 각각 자신만의 작업 공간을 가진다.(context)

4) 각 thread 사이에서 공유하는 자원이 있을 수 있다.(static, instance)

5) 여러 thread가 자원을 공유하여 작업이 수행되는 경우 서로 자원을 차지하려는 race condition이 발생할 수 있다.

6) Critical Section : 여러 thread가 공유하는 자원 중 경쟁이 발생하는 부분을 말한다.

7) Critical Section에 대한 동기화(Synchronization)를 구현해야 한다. 구현하지 않으면 오류가 발생할 수 있다.




4. 자바 Thread 만들기

 

1) Thread 클래스 상속

2) Runnable 인터페이스를 구현한다.

3) 람다식으로 Runnable 구현하기 ; run() 




5. Thread Status

  


Thread Status




6. Thread 클래스의 여러 메서드들

 

1) Thread 우선순위

– MIN_PRIORITY(=1) ~ MAX_PRIORIY(=10)

– 디폴트 우선순위 : NORM_PRIORITY(=5)

– 우선 순위가 높은 Thread가 CPU의 배분을 받을 확률이 높다.

– getPriority() / setPriority(int newPriority)

 

2) join()

– 동시에 두 개 이상의 Thread가 실행될 때, 다른 Thread의 결과를 참조하여 실행해야 하는 경우 join() 함수를 사용한다.

 

– join()를 호출한 Thread가 not-Runnable 상태가 된다.

– 다른 Thread의 수행이 끝나면 Runnable 상태로 돌아온다.

 

3) Thread 종료하기

– 무한 반복의 경우 while(flag)의 flag 변수값을 false로 바꾸어 종료를 시킨다.




7. 멀티 스레드 프로그래밍에서 동기화

 

1) Critical Section : 두 개 이상의 thread가 동시에 접근하는 경우 문제가 생길 수 있다. 그래서 동시에 접근할 수 없는 영역이다.

 

– 한 순간 오직 하나의 thread만이 Critical Section을 얻을 수 있고, 나머지 thread들은 대기(Blocking) 상태가 된다. 해당 thread만이 Critical Section에 들어갈 수 있다.

 

2) 동기화 (Synchronization)

– 두 개의 thread가 같은 객체에 접근할 경우, 동시에 접근함으로써 오류가 발생한다.

– 동기화는 임계영역에 접근한 경우 공유자원을 lock 하여 다른 thread의 접근을 제어한다.

– 동기화를 잘 못 구현하면 deadlock에 빠질 수 있다.

– 자바에서는 Synchronized 메서드나 Synchronized 블록을 사용하고 넣어주면 된다.

– Synchronized 메서드 : deadlock을 방지하는 기술이 제공되지 않으므로 Synchronized 메서드 내에서 다른 Synchronized 메서드를 호출하지 않도록 한다.

 

3) wait() / notify()를 활용한 동기화

 

– 리소스가 어떤 조건에서 더 이상 유효하지 않은 경우, 리소스를 기다리기 위해 wait() 메서드를 이용한다.

 

– wait() 상태가 된 Thread는 notify()가 호출 될 때까지 기다린다.

 

– 유효한 자원이 생기면 notify()가 호출되고 wait()하고 있는 Thread 중 무작위로 하나의 Thread를 재시작하도록 한다.

 

– notifyAll()이 호출되는 경우 wait()하고 있는 Thread가 재시작된다. 이 경우 유효한 리소스만큼의 Thread만이 수행될 수 있다. 자원을 갖지 못한 Thread의 경우에는 다시 wait() 상태로 만든다.

 

[자바 – Java] I/O 입출력 스트림 inputstream outputstream

 

[자바 – Java] I/O 입출력 스트림 inputstream outputstream

1. 입출력 스트림 1) 네트워크에서 자료의 흐름이 물의 흐름과 같다는 비유에서 스트림 용어가 사용되었다. 2) 다양한 입출력 장치에 독립적으로 일관성 있게 입출력을 할 수 있도록 입출력 스트

ozizo.tistory.com

문화누리카드 잔액조회 및 사용처, 지원대상 총정리

 

문화누리카드 잔액조회 및 사용처, 지원대상 총정리

문화누리카드란? 문화누리카드는 삶의 질 향상과 문화격차 완화를 위해 기초생활수급자나 차상위계층을 대상으로 문화예술, 국내여행, 체육활동을 지원하는 카드입니다. 문화누리카드는 기획

ozizo.tistory.com