Synchronized

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.

1 curtida

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)

1 curtida

Muito Obrigado peczenyj Não tinha ideia o que era um mutex fui pesquisar sobre o assunto valeu pelo todo apontamento!

1 curtida

Muito obrigado staroski por detalhar cada questão foi de grande valia para mim

1 curtida