高同時プログラミングのAtomicReference説明
3888 ワード
一、AtomicReference紹介①AtomicReferenceはAtomicIntegerとよく似ていますが、AtomicIntegerは整数のパッケージであり、AtomicReferenceは通常のオブジェクト参照に対応しています.つまり、オブジェクトリファレンスを変更するときのスレッドのセキュリティを保証します.
②.AtomicReferenceは「オブジェクト」を原子操作する役割を果たします.読み取りと書き込みが原子的なオブジェクト参照変数を提供します.原子は、複数のスレッドが同じAtomicReference(例えば、比較および交換動作)を変更しようとすると、AtomicReferenceが不一致にならないことを意味する.
二、AtomicReferenceのいくつかの常用方法
AtomicReferenceはオブジェクトを操作するため、まずオブジェクトクラス(JavaBean):SimpleObjectクラスを作成します.
‖SimpleObject類||
①.null初期値を使用して新しいAtomicReferenceを作成します.
②.指定した初期値を使用して新しいAtomicReferenceを作成します.
③.現在の値=予想値の場合は、その値を所定の更新値に原子的に設定します.
④.指定した値に原子を設定し、古い値を返します.現在のオブジェクトを取得し、新しいオブジェクトを設定します.
②.AtomicReferenceは「オブジェクト」を原子操作する役割を果たします.読み取りと書き込みが原子的なオブジェクト参照変数を提供します.原子は、複数のスレッドが同じAtomicReference(例えば、比較および交換動作)を変更しようとすると、AtomicReferenceが不一致にならないことを意味する.
二、AtomicReferenceのいくつかの常用方法
AtomicReferenceはオブジェクトを操作するため、まずオブジェクトクラス(JavaBean):SimpleObjectクラスを作成します.
‖SimpleObject類||
package chapter3.atomicreference;
/**
* @author czd
*/
public class SimpleObject {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
@Override
public String toString() {
return "SimpleObject{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public void setAge(Integer age) {
this.age = age;
}
public SimpleObject(String name, Integer age) {
this.name = name;
this.age = age;
}
}
①.null初期値を使用して新しいAtomicReferenceを作成します.
package chapter3.atomicreference;
import java.util.concurrent.atomic.AtomicReference;
/**
* @author czd
*/
public class AtomicReferenceTest {
public static void main(String[] args) {
//1、 null AtomicReference。
AtomicReference atomicReference = new AtomicReference<>();
atomicReference.set(new SimpleObject("test1" , 10));
SimpleObject simpleObject = atomicReference.get();
System.out.println("simpleObject Value: " + simpleObject.toString());
}
}
②.指定した初期値を使用して新しいAtomicReferenceを作成します.
package chapter3.atomicreference;
import java.util.concurrent.atomic.AtomicReference;
/**
* @author czd
*/
public class AtomicReferenceTest {
public static void main(String[] args) {
//2、 AtomicReference。
AtomicReference atomicReference1 = new AtomicReference<>(new SimpleObject("test2",20));
SimpleObject simpleObject1 = atomicReference1.get();
System.out.println("simpleObject Value: " + simpleObject1.toString());
}
}
③.現在の値=予想値の場合は、その値を所定の更新値に原子的に設定します.
package chapter3.atomicreference;
import java.util.concurrent.atomic.AtomicReference;
/**
* @author czd
*/
public class AtomicReferenceTest {
public static void main(String[] args) {
//3、 == , 。
SimpleObject test = new SimpleObject("test3" , 30);
AtomicReference atomicReference2 = new AtomicReference<>(test);
Boolean bool = atomicReference2.compareAndSet(test, new SimpleObject("test4", 40));
System.out.println("simpleObject Value: " + bool);
}
}
④.指定した値に原子を設定し、古い値を返します.現在のオブジェクトを取得し、新しいオブジェクトを設定します.
package chapter3.atomicreference;
import java.util.concurrent.atomic.AtomicReference;
/**
* @author czd
*/
public class AtomicReferenceTest {
public static void main(String[] args) {
//4、 , , ,
SimpleObject test1 = new SimpleObject("test5" , 50);
AtomicReference atomicReference3 = new AtomicReference<>(test1);
SimpleObject simpleObject2 = atomicReference3.getAndSet(new SimpleObject("test6",50));
SimpleObject simpleObject3 = atomicReference3.get();
System.out.println("simpleObject Value: " + simpleObject2.toString());
System.out.println("simpleObject Value: " + simpleObject3.toString());
}
}