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
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
'프로그래밍 > Java' 카테고리의 다른 글
[Java] 다이어그램 종류 - 시퀀스 다이어그램 (Sequence Diagram) (0) | 2022.12.06 |
---|---|
[자바 - Java] Builder pattern 모델링 UML 다이어그램 종류 및 설명 (0) | 2022.09.16 |
[자바 - Java] 입출력스트림 inputstream outputstream (0) | 2022.09.14 |
[자바 - Java] I/O 입출력 스트림 inputstream outputstream (0) | 2022.09.13 |
[자바 - Java] 예외처리 오류처리 try catch finally exception throw (0) | 2022.09.12 |