문제

Java가 들어있는 객체를 잠글 수있는 방법을 얻는 방법이 있습니까?

나는 이것이 혼란스러워 보이지만 기본적으로 나는 C# 의이 스 니펫과 동등한 것이 아니라 Java에서 동등하지 않다.

lock(this)
{
    // Some code here...
}

.NET로 작성된 API를 Java로 다시 구현하는 임무를 맡았으며 Java 버전을 인간적으로 가능한 .NET 버전과 유사하게 유지하라는 요청을 받았습니다. 이는 .NET 버전이 액세스 할 수없는 C ++ 버전에서 기록 된 것처럼 보였기 때문에 도움이되지 않습니다.

어쨌든 위의 줄은 C# 버전에 나타나며 Java에서 동일한 작업이 필요합니다.

도움이 되었습니까?

해결책

그것의 동등한 것은 다음과 같습니다.

synchronized (this)
{
}

(아니요, 일반적으로 C# 또는 Java에서 수행해서는 안됩니다. 다른 액세스 권한이없는 개인 참조를 고정하는 것을 선호합니다. 물론 이미 그 사실을 알고있을 수도 있지만 답을 남기고 싶지 않았습니다. 경고없이 :)

다른 팁

C ++ 코드가 간단한 뮤트라고 가정하면 "잠금"을 "동기화"로 바꾸십시오.

synchronized (this)
{
// ...
}

여기에 있습니다 Java 동시성 튜토리얼 더 많은 정보를 위해서

Brian Goetz 's를 추천합니다.실제로 Java 동시성. "훌륭한 책입니다.

동기화 된 블록을 최대한 작게 유지하는 것이 좋습니다. 이 방법에서 동기화 된 수정자를 사용하는 것은 거친 입자이며 때로는 필요하지만 그렇지 않으면 다른 객체를 사용하여 블록을 더 작게 유지할 수 있습니다.

이와 같이:

public class PrivateLock {
    private final Object myLock = new Object();
    @GuardedBy("myLock") Widget widget;

    void someMethod() {
        synchronized (myLock) {
            // Access or modify the state of widget
        }
    }
}

또한 세마포어, 교환기 등과 같은 추가 동시성 관리 객체에 대해서는 API (JDK 5.0+)의 java.util.concurrent 패키지를 살펴 봐야합니다.

http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top