프로세스와 스레드
- 프로세스 : 하나의 프로그램을 의미
- 스레드 : 하나의 프로그램 안에 있는 여러 개의 실행흐름 단위를 의미
멀티 스레드
- main + 플러스알파
- 여러 실행흐름이 동시에 발생하는것
- 장점 : 처리 속도가 빨라진다
- 주의할 점 : 동기화 - 한 사람이 먼저 한 스레드를 잡으면 나머지는 대기
멀티 스레드 구현방법
- Runnable 인터페이스를 구현하거나 Thread 클래스를 상속하고, run() 메소드를 오버라이딩한다.
Runnable 인터페이스 구현
Thread 클래스 상속
동기화 구현 방법
1. 메소드에 동기화 키워드 추가
public synchronized void withdraw(int money) {
if(balance >= money) {
try {
Thread.sleep(1000);
} catch (Exception e) {
}
balance -= money;
}
}
- 비추하는 방법
- 1개의 스레드만 이 메소드에 집입할 수 있다. 다른 스레드들은 먼저 진입한 스레드에서 메소드 호출이 종료될 때까지 대기한다.
- 메소드 전체가 lock 이 걸리기 때문에 동기화가 필요한 부분 외의 코드까지 잠긴다.
2. 명령 동기화
- 동기화 블럭 사용
- this - synchronized 블록 내부의 명령을 의미
public void withdraw(int money) {
synchronized (this) {
if(balance >= money) {
try {
Thread.sleep(1000);
} catch (Exception e) {
}
balance -= money;
}
}
}