Dentre as aplicações dadas, Synchronized aplica-se APENAS a
considere os modificadores Java e sua aplicação em
I. Atributo.
II. Variável local.
III. Método.
IV. Classe.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: D - III.
O modificador synchronized em Java é utilizado para controlar o acesso a blocos de código ou métodos que não devem ser executados simultaneamente por mais de uma thread. O uso desse modificador é uma forma de aplicar sincronização, que é essencial em ambientes multithread para evitar condições de corrida e garantir a consistência dos dados.
Vamos entender onde podemos aplicar o modificador synchronized:
- Atributos (I): Não é possível usar o modificador synchronized em atributos. A sincronização é aplicável a métodos e blocos de código, e não a variáveis ou atributos de uma classe.
- Variáveis locais (II): Variáveis locais são armazenadas na pilha de cada thread e, por isso, não são compartilhadas entre threads. Não faz sentido aplicar synchronized a elas, pois cada thread terá sua própria cópia independente da variável.
- Métodos (III): Aqui é onde o synchronized tem sua aplicação correta. Ao declarar um método como synchronized, garantimos que apenas uma thread por vez possa executá-lo, em relação ao objeto que possui o método. Se for um método estático, a sincronização é feita no nível da classe, e não do objeto.
- Classes (IV): Não aplicamos synchronized diretamente a classes. No entanto, podemos ter métodos estáticos sincronizados dentro de uma classe, o que sincroniza no nível da classe e não dos objetos.
Portanto, a alternativa correta é a D, que diz que synchronized aplica-se apenas a métodos (III). Esta é a única opção que está de acordo com as regras de sincronização de métodos em Java, onde o modificador é usado para prevenir a execução concorrente e garantir que somente uma thread possa executar o método por vez.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Ou como um bloco, colocando um objeto (ou seja, não pode colocar nenhum dos 8 tipos primitivos do Java: byte, boolean, char, short, int, long, float, double) que se deseja sincronizar:
// Como bloco
synchronized ( Object ) {
(...)
}
Ou como um método sincronizado:
// método sincronizado
public synchronized void evitandoAnomaliasDeAcessoConcorrente( ) {
(...)
}
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo