- 동시에 접근하는 걸 제어하는 것
- 동기화는 스레드가 사용 중인 객체의 작업이 끝날 때까지 사용 중인 객체에 잠금을 걸어서 다른 스레드가 접근할 수 없도록 한다.
- 자바는 동기화를 위해 동기화 메소드와 동기화 블록을 제공하는데 스레드가 객체 내부에 동기화 메소드 또는 동기화 블록을 실행하면 즉시 객체에 잠금을 걸어 다른 스레드가 객체에 접근하지 못하도록 한다.
- 동기화 메소드와 동기화 블록이 객체 내에 여러 개 있을 경우 스레드가 이들 중 하나를 실행하면 다른 스레드는 해당 메소드는 물론이고 객체 내의 다른 동기화 메소드 및 동기화 블록도 실행할 수 없다.
- 동기화 메소드는 선언부에 synchronized 키워드를 붙이면 된다
public synchronized void 메소드명() {
}
public static synchronized void 메소드명() {
}
- 메소드 전체 내용이 아니라 일부 내용만 동기화하고 싶을 때는 동기화 블록을 만들면 된다.
public void 메소드명() {
...
syschronized(this) {
...
}
}