compareAndSet
compareAndSet
public final boolean compareAndSet(int expect,
int update)
Atomically sets the value to the given updated value if the current value == the expected value.
Parameters:
expect - the expected value
update - the new value
Returns:
true if successful. False return indicates that the actual value was not equal to the expected value.
AtomicInteger
package chapter07;
import java.util.concurrent.atomic.AtomicInteger;
/**
*
* @author tengfei.fangtf
* @version $Id: AtomicIntegerTest.java, v 0.1 2015-8-1 上午12:13:16 tengfei.fangtf Exp $
*/
public class AtomicIntegerTest {
static AtomicInteger ai = new AtomicInteger(1);
public static void main(String[] args) {
System.out.println(ai.getAndIncrement());//current value:ai,if ai==1,ai更新为2
System.out.println(ai.get());
}
}
AtomicIntegerArray
package chapter07;
import java.util.concurrent.atomic.AtomicIntegerArray;
/**
*
* @author tengfei.fangtf
* @version $Id: AtomicIntegerArrayTest.java, v 0.1 2015-8-1 上午12:04:44 tengfei.fangtf Exp $
*/
public class AtomicIntegerArrayTest {
static int[] value = new int[] { 1, 2 };
static AtomicIntegerArray ai = new AtomicIntegerArray(value);
public static void main(String[] args) {
ai.getAndSet(0, 3);//index=0更新为3
System.out.println(ai.get(0));
System.out.println(value[0]);
}
}
AtomicReference
原子更新多个变量。
package chapter07;
import java.util.concurrent.atomic.AtomicReference;
/**
*
* @author tengfei.fangtf
* @version $Id: AtomicReferenceTest.java, v 0.1 2015-8-1 上午12:05:14 tengfei.fangtf Exp $
*/
public class AtomicReferenceTest {
public static AtomicReference<User> atomicUserRef = new AtomicReference<User>();
public static void main(String[] args) {
User user = new User("conan", 15);
atomicUserRef.set(user);
User updateUser = new User("Shinichi", 17);
atomicUserRef.compareAndSet(user, updateUser);
System.out.println(atomicUserRef.get().getName());
System.out.println(atomicUserRef.get().getOld());
}
public static class User {
private String name;
private int old;
public User(String name, int old) {
this.name = name;
this.old = old;
}
public String getName() {
return name;
}
public int getOld() {
return old;
}
}
}
AtomicIntegerFieldUpdater
package chapter07;
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
/**
*
* @author tengfei.fangtf
* @version $Id: AtomicIntegerFieldUpdaterTest.java, v 0.1 2015-8-1 上午12:04:51 tengfei.fangtf Exp $
*/
public class AtomicIntegerFieldUpdaterTest {
//AtomicIntegerFieldUpdater是抽象类,newUpdater创建更新器
private static AtomicIntegerFieldUpdater<User> a = AtomicIntegerFieldUpdater.newUpdater(User.class, "old");
public static void main(String[] args) {
User conan = new User("conan", 10);
System.out.println(a.getAndIncrement(conan));
System.out.println(a.get(conan));
}
public static class User {
private String name;
public volatile int old;//必须 public volatile修饰
public User(String name, int old) {
this.name = name;
this.old = old;
}
public String getName() {
return name;
}
public int getOld() {
return old;
}
}
}