메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
운영체제로부터 시스템 지원을 할당받는 작업의 단위
프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap 구조)를 할당받음
프로세스당 최소 1개의 thread(main thread)를 가지고 있다.
각 프로세스는 별도의 주소공간에서 실행. 변수, 자료구조 등에 접근 X (통신해야함)
프로세스 내에서 실행되는 여러 흐름의 단위. 프로세스가 할당받은 자원을 이용하는 실행의 단위
thread는 프로세스 내에서 각각 stack 만 따로 할당받고 Code, Data, Heap 영역은 공유한다
같은 프로세스 안에 있는 thread끼리 heap 공간 공유
메소드 자체를 synchronized 로 선언(synchronized methods)
동일한 객체를 참조하는 다른 쓰레드에서 plus메소드로 amount 변경하려고 하면 먼저 들어온 쓰레드가 종료될 때까지 기다림
public synchronized void plus(int value) {
amount += value;
};
메소드 내의 특정 문장만 synchronized로 감싸는 방법(synchronized statements)
중괄호 안에 있는 연산만 동시에 여러 쓰레드에서 병렬 처리하지 않겠다는 의미
public synchronized void plus(int value) {
synchronized(this) {
amount += value;
}
};
checkAccess(): 현재 수행중인 쓰레드 수정권한 확인
isAlive(): 살아있는지 확인
isInterrupted(): 정상종료되지 않고 interrupted 되었는지
interrupted(): 현재 쓰레드가 중지되었는지
activeCount: 현재 쓰레드가 속한 쓰레드 그룹 중 살아있는 쓰레드 개수
currentThread(): 현재 수행중인 쓰레드의 객체 리턴
dumpStack: 콘솔창에 쓰레드 스택 정보 풀력