Java는 모든 스레드가 종료되어야 프로그램이 종료된다. 즉, 메인 메소드가 종료된다고 프로그램이 종료되는 것이 아니다. 물론 데몬 스레드는 제외다. 데몬 스레드는 일반 스레드가 모두 종료되면 종료된다.
synchronized는 객체에만 lock을 걸 수 있다. 즉 원시 타입에는 적용시킬 수 없다. 만약 적용시켜도 동시성 문제가 해결되지 않는다.
데드락은 비선점(non-preemption), 상호배제(mutual exclusion), 점유대기(hold and wait), 순환대기(circular wait)의 4가지 조건을 만족할 경우 발생한다. 이 중 순환대기 상태는 상호배제와 점유대기를 만족해야 한다. 비선점이면서 순환대기라고 먼저 외우고 순환대기는 상호배제이면서 점유대기 상태일 경우 일어난다고 생각하자. 해결 방법도 알아봐야겠다.
배열의 타입은 해당 타입의 부모 자식 관계를 따라가도록 되어 있다. 즉 Object[] 로 선언 된 배열의 인스턴스로 모든 타입의 배열이 가능해진다. 배열은 공변(convariant) 이라는 것에 대한 설명이다.
미션 6은 마무리 하지 못했다. 폰에서 막혔기 때문인데, 한 쪽으로만 움직여야 하지만 경우에 따라서 대각선으로 움직여야 한다. 이 때, 해당 경우를 판단하기 위해서 도착지의 기물 색깔도 알아내야 하기 때문인데, 폰 하나때문에 모든 메소드에 추가적인 매개변수를 받는 것은 합리적이지 않아 보인다. 이런 경우가 많았던 것 같은데 내일은 이걸 해결해 보는 것을 목표로 하면 어떨까 싶다.