동기화의 이해 :이 코드를 감안할 때
public class Messager implements Runnable {
public static void main(String[] args) {
new Thread(new Messager("Wallace")).start();
new Thread(new Messager("Gromit")).start();
}
private String name;
public Messager(String name) { this.name = name; }
public void run() {
message(1); message(2);
}
private synchronized void message(int n) {
System.out.print(name + "-" + n + " ");
}
}
은 내가 synchronized
키워드는 개체의 잠금 스레드가 의존하게 이해합니다. 질문 :
a) synchronized
으로 표시된 방법이 완료되면 즉시 잠금이 해제 되나요? 또는 스레드의 run()
메서드가 완료되면 b) 스레드 중 하나가 다른 이름 앞에 1 2
을 인쇄하도록 할 수 있습니까?
실제로 두 개의 서로 다른 인스턴스가 잠겨 있으므로 'sycnhronized'는 아무 것도하지 않습니다. (명시 적으로 modifier가 아닌 synchronized 블록을 사용하면 더 명확 해집니다. 별도의 lock 객체를 사용하는 것이 좋습니다.) –