java i++ 并非原子操作的解决方法——用AtomicInteger
2017-11-07 15:58
453 查看
以下代码只在运行结束后打印结果
[java] view
plain copy
public class Test1 {
private static int a = 0;
public static void main(String[] args) throws InterruptedException{
System.err.println("LOL");
int n=500000;
while(n-->0){
startAdd();
}
Thread.sleep(2000);
System.err.println(a);
}
public static void startAdd(){
new Thread(new Runnable() {
@Override
public void run() {
a++;
}
}).start();
}
}
运行了5次结果
499980
499984
499982
499973
499989
而如果用AtomicInteger
[java] view
plain copy
public class Test2 {
private static AtomicInteger a = new AtomicInteger(0);
public static void main(String[] args) throws InterruptedException{
System.err.println("LOL");
int n=500000;
while(n-->0){
startAdd();
}
Thread.sleep(2000);
System.err.println(a);
}
public static void startAdd(){
new Thread(new Runnable() {
@Override
public void run() {
a.getAndIncrement();
}
}).start();
}
}
运行5次结果
500000
500000
500000
500000
还是500000
懂了吧
[java] view
plain copy
public class Test1 {
private static int a = 0;
public static void main(String[] args) throws InterruptedException{
System.err.println("LOL");
int n=500000;
while(n-->0){
startAdd();
}
Thread.sleep(2000);
System.err.println(a);
}
public static void startAdd(){
new Thread(new Runnable() {
@Override
public void run() {
a++;
}
}).start();
}
}
运行了5次结果
499980
499984
499982
499973
499989
而如果用AtomicInteger
[java] view
plain copy
public class Test2 {
private static AtomicInteger a = new AtomicInteger(0);
public static void main(String[] args) throws InterruptedException{
System.err.println("LOL");
int n=500000;
while(n-->0){
startAdd();
}
Thread.sleep(2000);
System.err.println(a);
}
public static void startAdd(){
new Thread(new Runnable() {
@Override
public void run() {
a.getAndIncrement();
}
}).start();
}
}
运行5次结果
500000
500000
500000
500000
还是500000
懂了吧
相关文章推荐
- java i++ 并非原子操作的解决方法——用AtomicInteger
- Java原子操作AtomicInteger的用法
- java.util.concurrent(JUC)的研究--》atomic原子操作--》从AtomicInteger开始
- Java原子操作AtomicInteger的用法
- Java原子操作AtomicInteger的用法
- Java int 同步和原子AtomicInteger效率比较
- java中AtomicInteger的使用方法
- POI操作excel2007 出现异常 java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlOptions 解决方法
- java.util.concurrent(JUC)的研究--》atomic原子操作--》happens-before法则
- (Kevin笔记三)用AtomicInteger来解决数据表异步操作的问题
- java中的原子操作类AtomicInteger及其实现原理
- java做批处理操作,报错java.sql.SQLRecoverableException解决方法
- Java中String类(字符串操作)的10个常见问题和解决方法
- Java自增原子性问题(测试Volatile、AtomicInteger)
- java并发:线程同步机制之Volatile关键字&原子操作Atomic
- java.util.concurrent.atomic原子操作
- android中遇到java.lang.NumberFormatException: unable to parse 'null' as integer此类问题的原因及解决方法
- Java中String类(字符串操作)的10个常见问题和解决方法
- gcc原子操作,AtomicIntegerT , gcc编译选项(11)
- java中的原子操作类AtomicInteger及其实现原理