Pergunta

Existe uma maneira em Java para obter um método para bloqueio (mutex) o objeto que está em?

Eu sei que isso parece confuso, mas basicamente eu wan't um equivelent para esse trecho de C #, mas em Java.

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

Eu fui encarregado de reimplementar uma API escrita em .Net em Java, e eu fui convidado a manter a versão Java como semelhante à versão .Net quanto humanamente possível. Isso não é ajudado pelo fato de que a versão .Net parecia que estava transcrito de um C ++ versão que eu não tenho acesso.

De qualquer forma a linha acima aparece na versão C # e eu preciso de algo que faz o mesmo em Java.

Foi útil?

Solução

O equivalente a isso é:

synchronized (this)
{
}

(E não, você não deve geralmente fazê-lo em C # ou Java Prefere bloqueio em referências privada, que nada mais tem acesso a Você pode estar ciente de que já, é claro -.. Mas eu não queria deixar uma resposta sem o aviso:)

Outras dicas

Supondo que o código C ++ é um mutex simples, substituir "bloqueio" com "sincronizado"

synchronized (this)
{
// ...
}

Aqui está o Java Concurrency tutorial para mais informações

Eu recomendo Brian Goetz de " Java Concurrency in Practice ." É um excelente livro.

Pode ser uma coisa boa para manter o bloco sincronizado tão pequeno quanto possível. Usando o modificador sincronizado sobre o método é de grão grosso e às vezes necessário, mas caso contrário, você pode usar outro objeto para fazê-lo que mantém o bloco menor.

Como esta:

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

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

Você também deve olhar para o pacote java.util.concurrent do API (JDK 5.0+) para gerenciamento de concorrência adicional objetos como semáforo, trocador, etc

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top