"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > O que é um atômico em Java? Compreendendo a atomicidade e a segurança de thread em Java

O que é um atômico em Java? Compreendendo a atomicidade e a segurança de thread em Java

Publicado em 2024-11-05
Navegar:348

What is an Atomic in Java? Understanding Atomicity and Thread Safety in Java

1. Introdução ao Atômico em Java

1.1 O que é um Atômico em Java?

Em Java, o pacote java.util.concurrent.atomic oferece um conjunto de classes que suportam programação thread-safe sem bloqueio em variáveis ​​únicas. Essas classes são chamadas coletivamente de variáveis ​​atômicas. As classes atômicas mais comumente usadas incluem AtomicInteger , AtomicLong , AtomicBoolean e AtomicReference.

Variáveis ​​atômicas são projetadas para serem atualizadas atomicamente, o que significa que suas operações (como incrementar, decrementar ou comparar e definir valores) são executadas como uma etapa única e indivisível. Isso garante que nenhum outro thread possa observar a variável em um estado intermediário.

Exemplo: usando AtomicInteger

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicExample {
    private AtomicInteger counter = new AtomicInteger(0);

    public void incrementCounter() {
        counter.incrementAndGet();
    }

    public int getCounter() {
        return counter.get();
    }

    public static void main(String[] args) {
        AtomicExample example = new AtomicExample();

        for (int i = 0; i 



Neste exemplo, AtomicInteger é usado para manter um contador que pode ser incrementado com segurança por vários threads sem causar inconsistências.

1.2 Atomicidade e segurança de thread

O termo "atomicidade" refere-se a operações que são concluídas em uma única etapa, sem a possibilidade de interferência de outras operações. No contexto de multithreading, isso significa que uma atualização de variável ocorre como uma operação do tipo tudo ou nada. Com tipos primitivos regulares, operações como incremento (i ) não são atômicas, o que significa que se vários threads tentarem atualizar a mesma variável simultaneamente, poderá ocorrer corrupção de dados.

Exemplo: Operação Não Atômica com Tipos Primitivos

public class NonAtomicExample {
    private int counter = 0;

    public synchronized void incrementCounter() {
        counter  ;
    }

    public int getCounter() {
        return counter;
    }

    public static void main(String[] args) {
        NonAtomicExample example = new NonAtomicExample();

        for (int i = 0; i 



Mesmo que a sincronização seja aplicada, essa abordagem pode levar a gargalos de desempenho devido à contenção de threads. As classes atômicas, entretanto, evitam isso usando instruções de CPU de baixo nível para garantir a atomicidade sem bloqueio.

2. Diferenças entre Atômicos e Primitivos Regulares

Agora que entendemos o que são variáveis ​​atômicas e como funcionam, vamos explorar como elas diferem dos tipos primitivos regulares em termos de atomicidade e segurança de thread.

2.1 Atomicidade em Primitivos Regulares vs. Atômicos

Primitivos regulares como int , long , boolean , etc., não são atômicos por natureza. As operações nessas variáveis, como incrementar ou definir um valor, podem ser interrompidas por outros threads, levando a dados inconsistentes ou corrompidos. Em contraste, as variáveis ​​atômicas garantem que essas operações sejam executadas como uma etapa única e ininterrupta.

Exemplo: Condição de corrida com tipos primitivos

public class RaceConditionExample {
    private int counter = 0;

    public void incrementCounter() {
        counter  ;
    }

    public static void main(String[] args) {
        RaceConditionExample example = new RaceConditionExample();

        for (int i = 0; i 



Neste exemplo, o valor final do contador pode não ser 1000 devido a condições de corrida. Vários threads podem acessar e modificar o contador simultaneamente, levando a resultados imprevisíveis.

2.2 Segurança de Thread em Primitivos Regulares vs. Atômicos

A segurança do thread é uma consideração importante na programação simultânea. Primitivos regulares exigem sincronização explícita para serem thread-safe, o que pode ser complicado e sujeito a erros. Os átomos, no entanto, são inerentemente seguros para threads, pois fornecem operações atômicas integradas.

Considerações de desempenho

O uso da sincronização com primitivas regulares pode levar a gargalos de desempenho devido à sobrecarga de aquisição e liberação de bloqueios. Por outro lado, as classes atômicas fornecem uma solução mais eficiente usando algoritmos sem bloqueio para obter segurança de thread sem bloqueios.

3. Conclusão

Variáveis ​​atômicas em Java fornecem uma maneira poderosa e eficiente de lidar com a simultaneidade e garantir a consistência dos dados. Eles diferem significativamente dos tipos primitivos regulares em termos de atomicidade e segurança de thread, oferecendo uma solução com melhor desempenho em ambientes multithread.

Ao compreender o conceito de atômico, você pode escrever código simultâneo mais seguro e eficiente em Java. Se você tiver alguma dúvida ou precisar de mais esclarecimentos, fique à vontade para deixar um comentário abaixo!

Leia mais postagens em: O que é um Atomic em Java? Noções básicas sobre atomicidade e segurança de thread em Java

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/anh_trntun_4732cf3d299/what-is-an-atomic-in-java-understanding-atomicity-and-thread-safety-in-java-33a4?1 Se houver alguma violação , entre em contato com study_golang @163.comdelete
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3