동기화, 대기 및 알림 사용을 중단해야 할 때입니까?


13

synchronized사용하는 것이을 사용하는 것보다 선호 되는 단일 시나리오 (고대 JVM과의 호환성 제외) 가 Lock있습니까? 누구나 새로운 시스템을 사용 wait하거나 그 notify이상의 것을 정당화 할 수 있습니까 ?

구현시 알고리즘 중 하나 를 사용해야 하는 알고리즘이 있습니까?

이 문제에 대해 언급 한 이전 질문을 보았지만 실제로 조금 더 나아가고 싶습니다 deprecate. 새로운 시설로 다림질 된 함정과 함정 및 경고가 너무 많습니다. 나는 그것들이 곧 쓸모없는 것으로 표시 될 때가되었다고 느꼈다.


4
실제로 Brian Goetz의 Java Concurrency를 읽었습니까? 그는 암묵적 vs 명시 적 잠금 토론을 훌륭하게 다루고 있습니다.
Martijn Verburg

@MartijnVerburg-슬프게도 나는 그의 작품에 대해 큰 존경심을 가지고 있습니다.
OldCurmudgeon

1
동기화 된 키워드는 스레드 안전 해야하는 간단한 정적 메소드와 함께 유용 할 수 있습니다. 그러나 이것은 내 의견이다
Kemoda

답변:


12

구현시 알고리즘 중 하나를 사용해야하는 알고리즘이 있습니까?

거의 확실하지 않습니다. (사실, 이론적 인 관점에서, 당신은. / 기타있는 java.util.concurrent를 사용하여 통지 시뮬레이션 대기 할 수 있어야 . 당신이 잠금 해제에주의해야하지만 ... 클래스. 그리고 명시 적으로 잠금 작업으로 대체 될 수 동기화 finally조항.)

그러나 Java에서 최상의 성능을 구현하려면 대기 및 알림 여부와 상관없이 동기화 된 직접 사용과 관련된 알고리즘 이 있을 수 있습니다.


동기화, 대기 및 알림 사용을 중단해야 할 때입니까?

이전 질문에 대한 답에 관계없이 대답은 확실히 아니오입니다.

대기 / 알림은 올바르게 사용될 수 있습니다 (그리고 종종 사용됩니다). Java에서는 폐기 된 클래스 및 메소드에 대해 더 이상 사용되지 않습니다. 즉, 지속적인 사용이 시급한 문제로 수정되어야하는 경우. Sun (및 현재 Oracle)이 기본적으로 사용되지 않고 대기 / 알림만큼 널리 사용된다면 막대한 양의 레거시 코드에 심각한 호환성 문제가 발생할 수 있습니다. 그것은 누군가의 관심사가 아닙니다.

코드에서 동기화 / 대기 / 알림을 제거하려면 괜찮습니다. 그러나 더 이상 사용되지 않을 경우 본질적으로 올바른 멀티 스레드 코드를 대량으로 다시 작성해야하므로 BAD IDEA가 될 것입니다. 기업 IT 관리자와 소프트웨어 제품 관리자는 그것을 제안하는 당신을 미워할 것입니다 ...


Java 문서에 따라 "더 이상 사용되지 않음"의 의미를 읽을 가치가 있습니다. http://docs.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html

또한 Java의 핵심 요소 인 더 이상 사용되지 않는 것에 대해 이야기하고 있습니다. 사용 중단 synchronized은 큰 결과를 초래합니다.


사실, "실제로 Java 동시성"책에 따르면 java.util.concurrent유틸리티 클래스는 실제로 더 빠릅니다. 뒤에서이 클래스는 VM과 직접 통신합니다. 여기서 VM은 동기화 될 때 객체 그래프의 객체에 무딘 잠금을 설치하여 글로벌 성능에 영향을줍니다.
akuhn

우리가 실제로 synchronizedet를 제거한다는 제안으로 건너 갔다면 @Stephen을 용서하십시오 . 알. 나는 더 이상 사용 중단을 제안하고 있으며, 실제로는 새로운 코드에는 이것을 사용하지 않는다고 말합니다. 나는 제거가 요구되는 레거시 코드를 손상시키고 시험해 보라고 제안하는 것을 꿈꾸지 않을 것입니다.
OldCurmudgeon

@OldCurmudgeon-늦은 응답이지만 사용 중단이 너무 극단적이라고 생각합니다. 1) 기능 제거 할 수 있음을 의미합니다 . 2) 단지 구식과는 다른 기능이 손상되었음을 나타냅니다. 3) 많은 사람들이 여전히 그런 식으로 새 코드를 작성하는 것을 기쁘게 생각합니다 ... 그렇지 않아야 할 강력한 이유가 없습니다. 4) 낙담하는 다른 "당신의 얼굴에"다른 방법이있다; 예 : PMD 규칙 작성 ...
Stephen C

@StephenC-그렇다면 우리가 취할 수있는 약간 덜 극적인 행동이 결국에는 대학에서 사용되거나 가르치지 않을 것입니다. 분명히 피해야합니다. PMD 규칙은 좋은 생각이지만 교사에게 매우 빨리 도달하지 못할 것으로 생각합니다.
OldCurmudgeon

1
@StephenC nitpick : 링크 된 Java 문서로 이동하면 더 이상 사용되지 않는 코드가 더 이상 사용되지 않는 코드라고 생각하지 않습니다. 그 이유 중 하나이지만 문서에서 알 수 있듯이 API가 더 새롭고 더 나은 API로 대체되면 API가 더 이상 사용되지 않을 수 있습니다 (OP가 주장하는 것처럼 동시성이 있습니다). 실제로 나쁜 관행을 장려하지 않을 경우 그리고 낮은 수준의 동시성, 확실히 매우 발생하기 쉬운 오류가 발생했습니다.
Andres F.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.