Simultaneidade Java - classe AtomicReference
Uma classe java.util.concurrent.atomic.AtomicReference fornece operações na referência de objeto subjacente que podem ser lidas e gravadas atomicamente e também contém operações atômicas avançadas. AtomicReference oferece suporte a operações atômicas na variável de referência de objeto 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 AtomicReference
A seguir está a lista de métodos importantes disponíveis na classe AtomicReference.
Sr. Não. | Método e Descrição |
---|---|
1 | public boolean compareAndSet(V expect, V update) Define atomicamente o valor para o valor atualizado fornecido se o valor atual == o valor esperado. |
2 | public boolean get() Retorna o valor atual. |
3 | public boolean getAndSet(V newValue) Define atomicamente o valor fornecido e retorna o valor anterior. |
4 | public void lazySet(V newValue) Eventualmente define o valor fornecido. |
5 | public void set(V newValue) Define incondicionalmente o valor fornecido. |
6 | public String toString() Retorna a representação de String do valor atual. |
7 | public boolean weakCompareAndSet(V expect, V update) Define atomicamente o valor para o valor atualizado fornecido se o valor atual == o valor esperado. |
Exemplo
O seguinte programa TestThread mostra o uso da variável AtomicReference em ambiente baseado em encadeamento.
import java.util.concurrent.atomic.AtomicReference;
public class TestThread {
private static String message = "hello";
private static AtomicReference<String> atomicReference;
public static void main(final String[] arguments) throws InterruptedException {
atomicReference = new AtomicReference<String>(message);
new Thread("Thread 1") {
public void run() {
atomicReference.compareAndSet(message, "Thread 1");
message = message.concat("-Thread 1!");
};
}.start();
System.out.println("Message is: " + message);
System.out.println("Atomic Reference of Message is: " + atomicReference.get());
}
}
Isso produzirá o seguinte resultado.
Resultado
Message is: hello
Atomic Reference of Message is: Thread 1