wordpress 经过天数/win7最好的优化软件
原子变量类
原子变量类基于CAS实现的,当对共享变量进行read-modify-write更新操作时,通过原子
变量类可以保障操作的原子性与可见性.对变量的read-modify-write更新操作是指当前
操作不是一个简单的赋值,而是变量的新值依赖变量的旧值,如自增操作i++.由于volatile
只能保证可见性,无法保障原子性,原子变量类内部就是借助一个Volatile变量,并且保障
了该变量的read-modify-write操作的原子性,有时把原子变量类看作增强的volatile变量
常用原子类:
package com.zz.AtomicArray.Lianxi;import java.util.concurrent.atomic.AtomicInteger;/*** 注意原子性问题主要解决元素不重复*/
public class AtoInteger01 {public static void main(String[] args) {AtomicInteger num = new AtomicInteger(10);for (int i = 0; i < 10; i++) {new Thread(new Runnable() {@Overridepublic void run() {for (int i1 = 0; i1 < 100; i1++) {num.getAndIncrement();System.out.println(num.get());}}}).start();}}
}======================================================================
package com.zz.AtomicArray.Lianxi;import java.util.concurrent.atomic.AtomicReference;public class AtomicReference001 {public static AtomicReference<String> str = new AtomicReference<>("zhang");public static void main(String[] args) throws InterruptedException {new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 10; i++) {str.compareAndSet("zhang", "111");System.out.println(str.get());System.out.println(str.compareAndSet("111", "abc"));}}}).start();Thread.sleep(1000);System.out.println(str.get());}
}-----------------------------------------------------------------
package com.zz.AtomicArray.Lianxi;import java.util.concurrent.atomic.AtomicIntegerArray;public class AtomicArray001 {public static AtomicIntegerArray list = new AtomicIntegerArray(10);public static void main(String[] args) {new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 100; i++) {list.set(i % 10, 10);System.out.println(list.getAndIncrement(2));System.out.println(list.get(3));}}}).start();}
}------------------------------------------------------package com.zz.AtomicIntegerFiledUpfate;public class Zi {private int age;volatile int count;public int getCount() {return count;}public void setCount(int count) {this.count = count;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Zi{" +"age=" + age +", count=" + count +'}';}
}
-------------------------------------------------
package com.zz.AtomicIntegerFiledUpfate;import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;public class Thread02 extends Thread{private Zi user;public Thread02(Zi user){this.user = user;}private AtomicIntegerFieldUpdater<Zi> use = AtomicIntegerFieldUpdater.newUpdater(Zi.class, "count");@Overridepublic void run() {for (int i = 0; i < 1000; i++) {System.out.println(use.getAndIncrement(user));}}
}