thread
- 프로그램 명령처리를 실행하는 흐름의 단위
- 프로그램 실행시 처음 생성되는 기본스레드( main thread )는 메인함수를 한번 실행하는 작업을 수행함
프로세스
- 프로그램 실행의 최소단위 ( 최소 하나의 쓰레드를 가짐 )
병렬처리
- 두개이상의 명령문장을 동시에 수행
병렬처리 구현방법
1. 다중 프로세스
-데이터 공유가 어려움
-각각의 프로세스가 별도의 메모리 공간을 할당 받기때문에
프로세스간에 데이터를 어떻게 주고 받을것인지가 이슈 ( IPC )
2. 다중 쓰레드
-각 쓰레드들이 하나의 프로세스안에서 공통된 메모리 공간( = 임계영역 )을
공유하기 때문에 교통정리가 이슈
Thread start()
Thread객체의 start메소드가 호출되면 새로운 명령처리 흐름이 생성됨 ( 파생 쓰레드 )
-> run함수를 한번 실행하는 작업을 수행
Thread객체의 start가 호출되면 파생쓰레드가 하나 만들어져서 해당 객체가 가지고 있는 run함수를 실행함
run함수를 Counting클래스가 재정의 했으므로 실제 실행되는 run함수는 동적바인딩에 의해 Counting의 sysout 실행
1. Thread를 상속받는 방법
2. Runnable 인터페이스를 구현 받는 방법
위 둘중에 다중상속이 안되기때문에 2번이 더좋다.
동기화 ( synchronization )
synchronized
-한순간에 하나의 스레드만 허용해서 쓰레드가 겹치는 것을 방지해줌
wait(); 와 notify();
- 쓰레드간의 수행 비율을 맞추기위해 사용
- wait();에서 멈췄다 다른 쓰레드에서 notify(); 를 만나면 다시 실행