Simultaneidade Java - classe AtomicLong
Uma classe java.util.concurrent.atomic.AtomicLong fornece operações no valor longo subjacente que podem ser lidos e gravados atomicamente e também contém operações atômicas avançadas. AtomicLong suporta operações atômicas na variável longa subjacente. Ele possui métodos get e set que funcionam como leituras e gravações em variáveis voláteis. Ou seja, um conjunto tem um relacionamento acontece antes com qualquer obtenção subsequente na mesma variável. O método atômico compareAndSet também possui esses recursos de consistência de memória.
Métodos AtomicLong
A seguir está a lista de métodos importantes disponíveis na classe AtomicLong.
Sr. Não. | Método e Descrição |
---|---|
1 | public long addAndGet(long delta) Adiciona atomicamente o valor fornecido ao valor atual. |
2 | public boolean compareAndSet(long expect, long update) Define atomicamente o valor para o valor atualizado fornecido se o valor atual for igual ao valor esperado. |
3 | public long decrementAndGet() Diminui atomicamente em um o valor atual. |
4 | public double doubleValue() Retorna o valor do número especificado como um duplo. |
5 | public float floatValue() Retorna o valor do número especificado como um float. |
6 | public long get() Obtém o valor atual. |
7 | public long getAndAdd(long delta) Atomicamente adiciona o valor fornecido ao valor atual. |
8 | public long getAndDecrement() Diminui atomicamente em um o valor atual. |
9 | public long getAndIncrement() Aumenta atomicamente em um o valor atual. |
10 | public long getAndSet(long newValue) Define atomicamente o valor fornecido e retorna o valor antigo. |
11 | public long incrementAndGet() Aumenta atomicamente em um o valor atual. |
12 | public int intValue() Retorna o valor do número especificado como um inteiro. |
13 | public void lazySet(long newValue) Eventualmente define o valor fornecido. |
14 | public long longValue() Retorna o valor do número especificado como um longo. |
15 | public void set(long newValue) Define o valor fornecido. |
16 | public String toString() Retorna a representação de String do valor atual. |
17 | public boolean weakCompareAndSet(long expect, long update) Define atomicamente o valor para o valor atualizado fornecido se o valor atual for igual ao valor esperado. |
Exemplo
O programa TestThread a seguir mostra uma implementação segura de contador usando AtomicLong em ambiente baseado em thread.
import java.util.concurrent.atomic.AtomicLong;
public class TestThread {
static class Counter {
private AtomicLong c = new AtomicLong(0);
public void increment() {
c.getAndIncrement();
}
public long value() {
return c.get();
}
}
public static void main(final String[] arguments) throws InterruptedException {
final Counter counter = new Counter();
//1000 threads
for(int i = 0; i < 1000 ; i++) {
new Thread(new Runnable() {
public void run() {
counter.increment();
}
}).start();
}
Thread.sleep(6000);
System.out.println("Final number (should be 1000): " + counter.value());
}
}
Isso produzirá o seguinte resultado.
Resultado
Final number (should be 1000): 1000