Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Sincronização de Threads | Conceitos Básicos de Multithreading
Multithreading em Java

bookSincronização de Threads

Métodos e Blocos Síncronos

Métodos e blocos síncronos em Java impedem que múltiplas threads acessem o mesmo recurso simultaneamente. Isso ajuda a evitar problemas como condições de corrida, onde várias threads tentam modificar um recurso compartilhado ao mesmo tempo.

Exemplo da vida real: Imagine um armazém com uma única entrada e saída. Se várias pessoas tentarem usar a mesma porta ao mesmo tempo, pode causar confusão. A sincronização na programação atua como um controlador na porta, permitindo que apenas uma pessoa passe por vez para evitar colisões.

Métodos Síncronos

Quando um método é declarado com a palavra-chave synchronized, ele automaticamente bloqueia o objeto ao qual o método pertence durante a execução do método.

Exemplo de código

Main.java

Main.java

copy
123
public synchronized void increment() { //Adding the synchronized count++; }

Neste exemplo, o método increment() é sincronizado, o que significa que apenas uma thread pode executar este método em um determinado momento.

Blocos Síncronos

Blocos sincronizados permitem sincronizar apenas uma seção específica de um método, o que é útil caso seja necessário sincronizar apenas uma parte do código.

Exemplo de código

Main.java

Main.java

copy
12345
public void increment() { synchronized(this) { count++; } }

Neste exemplo, apenas o código dentro de synchronized(this) é sincronizado, o que melhora o desempenho se todo o método não precisar de sincronização.

Note
Nota

No bloco synchronized(this), a palavra-chave this significa que o bloco de código é sincronizado na instância atual do objeto, especificamente no objeto para o qual este método é chamado.

Monitores de Objeto

Quando uma thread adquire um monitor de objeto, ela obtém acesso exclusivo aos métodos sincronizados ou blocos desse objeto. Outras threads que tentarem acessar métodos ou blocos sincronizados do mesmo objeto serão bloqueadas até que o monitor seja liberado.

Métodos wait(), notify(), notifyAll()

O método wait() é utilizado para suspender a execução da thread atual e liberar os recursos que ocupa até que outra thread invoque o método notify() ou notifyAll() para o mesmo objeto monitor.

Os métodos notify() e notifyAll() são utilizados para retomar a execução de uma ou todas as threads bloqueadas em um objeto monitor.

Note
Nota

Os métodos wait(), notify() e notifyAll() devem ser chamados dentro de um bloco sincronizado associado ao mesmo objeto monitor da thread pendente para garantir a sincronização adequada.

No próximo capítulo, exploraremos o que pode ocorrer se você não utilizar a sincronização.

1. O que a palavra-chave synchronized faz em Java?

2. Como o monitor de objeto funciona em Java?

question mark

O que a palavra-chave synchronized faz em Java?

Select the correct answer

question mark

Como o monitor de objeto funciona em Java?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 4

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 3.33

bookSincronização de Threads

Deslize para mostrar o menu

Métodos e Blocos Síncronos

Métodos e blocos síncronos em Java impedem que múltiplas threads acessem o mesmo recurso simultaneamente. Isso ajuda a evitar problemas como condições de corrida, onde várias threads tentam modificar um recurso compartilhado ao mesmo tempo.

Exemplo da vida real: Imagine um armazém com uma única entrada e saída. Se várias pessoas tentarem usar a mesma porta ao mesmo tempo, pode causar confusão. A sincronização na programação atua como um controlador na porta, permitindo que apenas uma pessoa passe por vez para evitar colisões.

Métodos Síncronos

Quando um método é declarado com a palavra-chave synchronized, ele automaticamente bloqueia o objeto ao qual o método pertence durante a execução do método.

Exemplo de código

Main.java

Main.java

copy
123
public synchronized void increment() { //Adding the synchronized count++; }

Neste exemplo, o método increment() é sincronizado, o que significa que apenas uma thread pode executar este método em um determinado momento.

Blocos Síncronos

Blocos sincronizados permitem sincronizar apenas uma seção específica de um método, o que é útil caso seja necessário sincronizar apenas uma parte do código.

Exemplo de código

Main.java

Main.java

copy
12345
public void increment() { synchronized(this) { count++; } }

Neste exemplo, apenas o código dentro de synchronized(this) é sincronizado, o que melhora o desempenho se todo o método não precisar de sincronização.

Note
Nota

No bloco synchronized(this), a palavra-chave this significa que o bloco de código é sincronizado na instância atual do objeto, especificamente no objeto para o qual este método é chamado.

Monitores de Objeto

Quando uma thread adquire um monitor de objeto, ela obtém acesso exclusivo aos métodos sincronizados ou blocos desse objeto. Outras threads que tentarem acessar métodos ou blocos sincronizados do mesmo objeto serão bloqueadas até que o monitor seja liberado.

Métodos wait(), notify(), notifyAll()

O método wait() é utilizado para suspender a execução da thread atual e liberar os recursos que ocupa até que outra thread invoque o método notify() ou notifyAll() para o mesmo objeto monitor.

Os métodos notify() e notifyAll() são utilizados para retomar a execução de uma ou todas as threads bloqueadas em um objeto monitor.

Note
Nota

Os métodos wait(), notify() e notifyAll() devem ser chamados dentro de um bloco sincronizado associado ao mesmo objeto monitor da thread pendente para garantir a sincronização adequada.

No próximo capítulo, exploraremos o que pode ocorrer se você não utilizar a sincronização.

1. O que a palavra-chave synchronized faz em Java?

2. Como o monitor de objeto funciona em Java?

question mark

O que a palavra-chave synchronized faz em Java?

Select the correct answer

question mark

Como o monitor de objeto funciona em Java?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 4
some-alt