JUC并发包提供了:
- AtomicBoolean
- AtomicInteger
- AtomicLong
以AtomicInteger为例,一些简单的API
package com.sharing_model.no_lock;
import java.util.concurrent.atomic.AtomicInteger;
/**
* AtomicInteger 测试
*/
public class AtomicIntegerTest {
public static void main(String[] args) {
AtomicInteger i = new AtomicInteger(0);
//下面都是线程安全的
// 功能上等价于 ++i
System.out.println(i.incrementAndGet());
// 功能上等价于 i++
System.out.println(i.getAndIncrement());
// 功能上等价于 i--
System.out.println(i.getAndDecrement());
// 功能上等价于 --i
System.out.println(i.decrementAndGet());
//一次添加多个 一次减少多个(参数 【*-1】)
System.out.println(i.getAndAdd(2));
System.out.println(i.addAndGet(2));
}
}
一些复杂的操作:
package com.sharing_model.no_lock;
import java.util.concurrent.atomic.AtomicInteger;
/**
* AtomicInteger2 测试一些复杂的方法,如 * , /
*/
public class AtomicIntegerTest2 {
public static void main(String[] args) {
AtomicInteger i = new AtomicInteger(5);
//参数: 读取的值
i.updateAndGet(x -> x * 10);
//上面的代码的等价形式
while (true) {
int prev = i.get();
int next = prev * 10;
if (i.compareAndSet(prev, next)) {
break;
}
}
System.out.println(i.get());
}
}