스레드를 만들지 않으면 모든 메서드를 동기화해야합니까 (예외는 주입니다). 그렇다면 누군가 이유를 설명하고 몇 가지 예를 들어주십시오.메인 스레드 만있는 경우 동기화해야 할 메소드가 있습니까?
답변
자신의 스레드를 만들지 않으려면 no, synchronized
키워드를 사용할 필요가 없습니다. 그것은 당신이 J2EE 서블릿이나 필터를 쓰고 있지 않거나 다른 사람들이 (다중 쓰레드를 사용하고있는) 라이브러리가 호출 할 수 있다고 가정합니다.
이 상황에서 동기화가 필요하지 않습니다. 개의 스레드가 공유 데이터에 액세스 할 때 동기화가 이루어집니다.
동기화 된 메서드는 두 스레드가 한 번에 동기화 된 메서드에서 작동하지 않도록하려는 경우에 사용됩니다. 응용 프로그램이 단일 스레드 인 경우 잠금을 취하고 동기화 오버 헤드를 추가 할 필요가 없습니다.
아니요, 성능에 영향을 미치지 않아야합니다. 동기화를 한 스레드에서 모두 수행하는 경우에는 사용하지 않아야합니다.
단일 스레드 응용 프로그램의 동기화는 성능에 영향을주지 않습니다. 하지만 다중 스레드가 가능합니다. –
@inikolaev 조숙 한 최적화. –
@inikolaev 단일 스레드 응용 프로그램에서는 컨텍스트 스위치가 없지만 스레드는 동기화 된 블록을 실행하여 오버 헤드 인 객체에 대한 잠금을 획득해야합니다. – pundit
나는 당신이 당신이 필요로하는 것을 어디에 들었는지 궁금합니다. 물론 그렇지 않습니다. –
GUI가 있습니까? –