Olá pessoal, minha dúvida sobre esta questão:
Quando definimos um método estático com a palavra synchronized dentro de uma classe?
O método executa normalmente ?
A palavra chave synchronized só posso usá-la em método estático?
Quando queremos que num ambiente multithread o acesso àquele método seja sincronizado pela classe e não pela instância.
Sim
Não, pode-se usar o synchonized
em qualquer método não abstrato.
Se o método não for estático, então a sincronização será no objeto e não na classe.
Também pode-se utilizar o synchronized
em blocos de código, neste caso utiliza-se um objeto como parâmetro para sincronizar o código.
em java vc pode usar qualquer Object como um mutex.
synchronized em um metodo eh uma forma de vc escrever menos codigo, equivale a
public void someMethod() {
synchronized (this) {
//stuff
}
}
porem de certa forma mais eficiente.
a diferença entre Vector e ArrayList é justamente que os metodos do Vector são sincronizados. por um lado é facil de usar em ambiente multi-threaded por outro se vc não precisa pode sofrer com perda de performance pelo codigo extra que é executado (faz um comparativo rapidinho das duas classes pra vc ver)
Muito Obrigado peczenyj Não tinha ideia o que era um mutex fui pesquisar sobre o assunto valeu pelo todo apontamento!
Muito obrigado staroski por detalhar cada questão foi de grande valia para mim