Basta registrar como usar a palavra-chave sincronizada em java.
Antes da introdução, é necessário esclarecer que cada instância de objeto de uma classe em Java possui e possui apenas um bloqueio (bloqueio) associado a ela. A palavra-chave sincronizada atua apenas sobre esse bloqueio, ou seja, pode-se considerar que sincronizado apenas. afeta instâncias de objetos do efeito da classe Java.
função modificada sincronizada
Copie o código do código da seguinte forma:
aMethod sincronizado público(){
}
Este é o cenário mais comumente usado, então qual é o propósito deste método de sincronização, por conveniência, ele é chamado de método aMethod.
1. O que bloqueia sincronizado é a instância do objeto que chama esse método de sincronização. Por exemplo, a sincronização ocorrerá quando a mesma instância P1 chamar aMethod em threads diferentes;
2. Deve-se notar que outro objeto P2 da classe à qual este objeto pertence pode chamá-lo de aMethod arbitrariamente, porque os métodos sincronizados de diferentes instâncias do objeto não interferem entre si. Em outras palavras, outros threads ainda podem acessar o método aMethod em outra instância de objeto da mesma classe ao mesmo tempo;
3. Se um objeto tiver vários métodos sincronizados, como aMethod, bMethod e cMethod, agora, desde que um thread acesse um dos métodos sincronizados, outros threads não poderão acessar nenhum método sincronizado no objeto ao mesmo tempo.
O código acima é na verdade equivalente ao seguinte:
Copie o código do código da seguinte forma:
public void aMethod() {
sincronizado (este) {
}
}
Isto aqui se refere à referência do objeto de instância, como P1. Pode-se observar que a essência do método de sincronização é aplicar sincronizado à referência do objeto. Somente o thread que obteve o bloqueio do objeto P1 pode chamar o método de sincronização de P1. No que diz respeito a P2, o bloqueio P1 não tem nada a ver com isso. situação, causando confusão de dados. Disto derivamos o bloco de sincronização abaixo.
bloco de código modificado sincronizado
Copie o código do código da seguinte forma:
public void dMethod(AlgumObjeto então) {
sincronizado(assim) {
}
}
O bloqueio obtido por sincronizado aqui é o bloqueio do objeto so, então quem obtiver o bloqueio poderá executar o código que controla. Quando há um objeto claro como bloqueio, você pode escrever o programa assim, mas quando não há nenhum objeto claro como bloqueio e você deseja apenas sincronizar um trecho de código, você pode criar uma variável de instância especial (deve ser um objeto) para atuar como bloqueio:
Copie o código do código da seguinte forma:
class Foo implementa Runnable {
byte privado[] bloqueio = novo byte[0];
Método de vazio público() {
sincronizado(bloqueio) {
}
}
}
Um objeto de matriz de bytes de comprimento zero será mais econômico de criar do que qualquer outro objeto.
método estático modificado sincronizado
Conforme mencionado anteriormente, a palavra-chave sincronizada só é válida para instâncias P1 em threads diferentes. Então, como pode ser válida para instâncias diferentes de P1 e P2 ao mesmo tempo. A resposta é usar métodos estáticos sincronizados. pode-se dizer que uma classe pertence a esta classe. Ela não depende de instâncias da classe, portanto, só precisamos usar a palavra-chave sincronizada para modificar os métodos estáticos da classe para obter a sincronização entre diferentes instâncias.