很多人问像AtomicInteger类是在哪个方面使用的?
这里贴下一段测试代码:
public class ThreadDemo {
static int count = 0;
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread() {
public void run() {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int j= 0; j <100; j++) {
count++;
}
}
}.start();
}
try {
Thread.sleep(2000);
System.out.println("count=" + count);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
大家觉得输出的是什么?一般绝大多数都不等于1000。
但如何保证输出的是1000,即在其中一个线程对这个变量操作增1时,保证这个变量不被其他的线程访问。
可以使用原子类。
再来看这段代码:
public class ThreadDemo {
static AtomicInteger count = new AtomicInteger(0);
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread() {
public void run() {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int j= 0; j <100; j++) {
count.incrementAndGet();
}
}
}.start();
}
try {
Thread.sleep(2000);
System.out.println("count=" + count);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
输出的结果是1000,即是我们想要的结果。