/**
* 方法一:包装类的使用
* 要求: 在jdk5之后出现线程安全类 比如AtomicInteger,...AtomicIntegerFieldUpdater ,使用此类保证资源的互斥性
*/
import java.util.concurrent.atomic.*;
class Container {
public volatile int no;
}
class Task extends Thread {
private AtomicIntegerFieldUpdater<Container> updater =
AtomicIntegerFieldUpdater.newUpdater(Container.class, "no");
private Container c;
public Task( Container c) {
this.c = c;
}
@Override
public void run() {
System.out.println(updater.getAndDecrement(c));
System.out.println(updater.getAndIncrement(c));
}
}
public class UpdaterUsage {
public static void main (String [] args) {
Container c = new Container(); //同一份c里面的int数据
Task t1 = new Task(c);
Task t2 = new Task(c);
t1.start();
t2.start();
}
}
package zhu.test;
/**
* 方法二
* 要求: 在jdk5之后出现线程安全类 比如AtomicInteger,...AtomicIntegerFieldUpdater ,使用此类保证资源的互斥性
*/
import java.util.concurrent.atomic.*;
class Container22 {
public volatile int no;
}
public class fUpdaterUsage2 {
public static void main (String [] args) {
final AtomicIntegerFieldUpdater<Container22> updater2 = AtomicIntegerFieldUpdater.newUpdater(Container22.class, "no");
final Container22 c = new Container22(); //同一份c里面的int数据
new Thread(
new Runnable() {
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println(updater2.getAndDecrement(c)+"线程10");
System.out.println(updater2.getAndIncrement(c)+"线程1");
}
}
}
).start();
new Thread(
new Runnable() {
@Override
public void run() {
System.out.println(updater2.getAndDecrement(c)+"线程2");
System.out.println(updater2.getAndIncrement(c)+"线程2");
}
}
).start();
}
}