동기화를 사용하는 이유가 있나요?
공유데이터를 동시에 접근해서 수정하는 행위에서 데이터 일관성 문제 등이 발생할 수 있기 때문에, 동기화를 사용합니다.
자바의 경우 멀티프로세스가 아닌 멀티쓰레드 기반이기 때문에, 항상 동기화를 주의해야 합니다.
자바의 멀티쓰레딩의 경우 쓰레드의 우선순위는 어떻게 정해지나요?
**우선순위 방식(priority)** 은 우선순위가 높은 스레드가 실행 상태를 더 많이 가지도록 스케줄링 하는 것을 말합니다, 이는 setPriority() 메서드를 사용해서 우선순위를 결정할 수 있습니다.
**순환 할당 방식(Round-Robin)** 은 시간 할당량(Time Slice)을 정해서 하나의 스레드를 정해진 시간만큼 실행하고 다시 다른 스레드를 실행하는 방식으로, 모든 동작중인 스레드는 같은 시간의 실행 시간만을 가진 후 다른 스레드로 실행을 넘기게 됩니다.
자바에서는 JVM이 순환 할당 방식에서의 시간 할당량을 결정하기 때문에, 개발자의 임의로 수정할 수 없습니다.
그래서 멀티 스레드에 우선순위를 부여하기 위해 개발자가 할 수 있는 방법은 우선순위 방식을 사용하는 것입니다.
우선순위 방식은 1 ~ 10 까지 부여할 수 있고, 1이 가장 낮고 10이 가장 높은 우선순위를 가집니다.
의존성 주입하실 때 어떤 방식이 있고, 그 중 자주 사용하는 방식이 있나요?
생성자 주입 / Setter 주입 / @Autowired 이 있습니다.
실행 결과에 따라 오류가 발생해야 할 때가 있는데, 생성자 주입을 제외하고 나머지 두가지 방식은 실행시 오류가 나지 않고, 해당 소스 접근시 에러가 납니다.
생성자 주입은 실행시 바로 에러 검출이 됩니다.
실행 결과에 차이가 발생하는 이유는 무엇일까? 생성자 주입 방법은 필드 주입이나 수정자 주입과는 빈을 주입하는 순서가 다르다.
생성자 주입(Constructor Injection)은 생성자로 객체를 생성하는 시점에 필요한 빈을 주입한다. 조금 더 자세히 살펴보면, 먼저 생성자의 인자에 사용되는 빈을 찾거나 빈 팩터리에서 만든다. 그 후에 찾은 인자 빈으로 주입하려는 빈의 생성자를 호출한다. 즉, 먼저 빈을 생성하지 않는다. 수정자 주입과 필드 주입과 다른 방식이다.
쓰레드 이용해본 경험이 있나요?
학부생 때 과제를 받았습니다.
자바 쓰레드 클래스를 상속 받아서 구현하려고 했는데,
이미 상속받은 클래스가 있어서 Runnable인터페이스를 구현했습니다.