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

bookAtomicidade

Incremento e Atomicidade

Neste código, é definida uma classe Counter com uma variável count e um método increment que aumenta o valor da variável count em 1.

Main.java

Main.java

copy
1234567
public class Counter { int count; // Declare a variable public void increment() { // In this method we increment count++; } }

Pode parecer que incrementar é uma única operação, mas na verdade é composta por 3 operações:

Mas no nível do código de máquina, estas são várias operações:

1. Leitura do valor de count;

2. Incremento do valor em 1;

3. Gravação do novo valor de volta em count.

Note
Nota

Se múltiplas threads executarem esta operação simultaneamente sem sincronização, o resultado pode ser incorreto porque uma thread pode começar a incrementar enquanto outra ainda está gravando o resultado do incremento na memória. Este problema é conhecido como condição de corrida.

Como Evitar Violações de Atomicidade?

As seguintes abordagens podem solucionar problemas de atomicidade em programação multithread em Java:

Uso de sincronização: A sincronização controla o acesso a recursos compartilhados utilizando a palavra-chave synchronized, que pode ser aplicada a métodos ou blocos de código.

Uso de classes atômicas: O pacote java.util.concurrent.atomic do Java oferece classes para operações atômicas. Essas classes utilizam mecanismos de sincronização de baixo nível, como CAS (Compare-And-Swap), para garantir atomicidade sem locks. (Exploraremos essas classes em mais detalhes posteriormente)

Uso de classes e coleções de alto nível: O Java fornece estruturas de dados de alto nível sincronizadas, como ConcurrentHashMap e CopyOnWriteArrayList, que oferecem acesso seguro por múltiplas threads. (Revisaremos essas classes em mais detalhes posteriormente)

1. Quais das seguintes abordagens ajudam a garantir a atomicidade das operações em Java?

2. Por que a operação de incremento (incrementar um valor em 1) não é atômica em programação multithread?

question mark

Quais das seguintes abordagens ajudam a garantir a atomicidade das operações em Java?

Select the correct answer

question mark

Por que a operação de incremento (incrementar um valor em 1) não é atômica em programação multithread?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 6

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

bookAtomicidade

Deslize para mostrar o menu

Incremento e Atomicidade

Neste código, é definida uma classe Counter com uma variável count e um método increment que aumenta o valor da variável count em 1.

Main.java

Main.java

copy
1234567
public class Counter { int count; // Declare a variable public void increment() { // In this method we increment count++; } }

Pode parecer que incrementar é uma única operação, mas na verdade é composta por 3 operações:

Mas no nível do código de máquina, estas são várias operações:

1. Leitura do valor de count;

2. Incremento do valor em 1;

3. Gravação do novo valor de volta em count.

Note
Nota

Se múltiplas threads executarem esta operação simultaneamente sem sincronização, o resultado pode ser incorreto porque uma thread pode começar a incrementar enquanto outra ainda está gravando o resultado do incremento na memória. Este problema é conhecido como condição de corrida.

Como Evitar Violações de Atomicidade?

As seguintes abordagens podem solucionar problemas de atomicidade em programação multithread em Java:

Uso de sincronização: A sincronização controla o acesso a recursos compartilhados utilizando a palavra-chave synchronized, que pode ser aplicada a métodos ou blocos de código.

Uso de classes atômicas: O pacote java.util.concurrent.atomic do Java oferece classes para operações atômicas. Essas classes utilizam mecanismos de sincronização de baixo nível, como CAS (Compare-And-Swap), para garantir atomicidade sem locks. (Exploraremos essas classes em mais detalhes posteriormente)

Uso de classes e coleções de alto nível: O Java fornece estruturas de dados de alto nível sincronizadas, como ConcurrentHashMap e CopyOnWriteArrayList, que oferecem acesso seguro por múltiplas threads. (Revisaremos essas classes em mais detalhes posteriormente)

1. Quais das seguintes abordagens ajudam a garantir a atomicidade das operações em Java?

2. Por que a operação de incremento (incrementar um valor em 1) não é atômica em programação multithread?

question mark

Quais das seguintes abordagens ajudam a garantir a atomicidade das operações em Java?

Select the correct answer

question mark

Por que a operação de incremento (incrementar um valor em 1) não é atômica em programação multithread?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

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