日期:2014-05-20  浏览次数:20763 次

关于AtomicInteger类的问题
我写的测试例子代码: 


import java.util.concurrent.atomic.AtomicInteger;

public class AtomicCounter {

    private AtomicInteger c = new AtomicInteger(0);

    public void increment() {
        c.incrementAndGet();
    }

    public void decrement() {
        c.decrementAndGet();
    }

    public int value() {
        return c.get();
    }
    
    
/**
 * @param args
 */
public static void main(String[] args) {
final AtomicCounter ac = new AtomicCounter();

new Thread(new Runnable() {

@Override
public void run() {
int i = 0;
while(i<100) {
ac.increment();
System.out.println(Thread.currentThread().getName() +"--" + ac.value());
i++;
}

}
}).start();

new Thread(new Runnable() {

@Override
public void run() {
int i = 0;
while(i<100) {
ac.decrement();
System.out.println(Thread.currentThread().getName() +"--" + ac.value());
i++;
}

}
}).start();
}

}



在我的机器上运行的结果:

Thread-0--1
Thread-0--2
Thread-0--3
Thread-0--4
Thread-0--5
Thread-0--6
Thread-0--7
Thread-0--8
Thread-0--9
Thread-0--10
Thread-0--11
Thread-0--12
Thread-0--13
Thread-0--14
Thread-0--15
Thread-0--16
Thread-0--17
Thread-0--18
Thread-0--19
Thread-0--20
Thread-0--21
Thread-0--22
Thread-0--23
Thread-0--24
Thread-0--25
Thread-0--26
Thread-0--27
Thread-0--28
Thread-0--29
Thread-0--30
Thread-0--31
Thread-0--32
Thread-0--33
Thread-0--34
Thread-0--35
Thread-0--36
Thread-0--37
Thread-0--38
Thread-0--39
Thread-0--40
Thread-0--41
Thread-0--42
Thread-0--43
Thread-0--44
Thread-0--45
Thread-0--46
Thread-0--47
Thread-0--48
Thread-0--49
Thread-0--50
Thread-0--51
Thread-0--52
Thread-0--53
Thread-0--54
Thread-0--55
Thread-0--56
Thread-0--57
Thread-0--58
Thread-0--59
Thread-0--60
Thread-0--61
Thread-0--62
Thread-0--62
Thread-0--63
Thread-0--64
Thread-0--65
Thread-0--66
Thread-0--67
Thread-0--68
Thread-0--69
Thread-0--70
Thread-0--71
Thread-0--72
Thread-0--73
Thread-0--74
Thread-0--75
Thread-0--76
Thread-0--77
Thread-0--78
Thread-0--79
Thread-0--80
Thread-0--81
Thread-0--82
Thread-0--83
Thread-0--84
Thread-1--61
Thread-1--84
Thread-1--83
Thread-1--82
Thread-1--81
Thread-1--80
Thread-1--79
Thread-1--78
Thread-1--77
Thread-1--76
Thread-1--75
Thread-1--74
Thread-1--73
Thread-1--72
Thread-1--71
Thread-1--70
Thread-1--69
Thread-1--68
Thread-1--67
Thread-1--66
Thread-1--65
Thread-1--64
Thread-1--63
Thread-1--62
Thread-1--61
Thread-1--60
Thread-1--59
Thread-1--58
Thread-1--57
Thread-1--56
Thread-1--55
Thread-1--54
Thread-1--53
Thread-1--52
Thread-1--51
Thread-1--50
Thread-1--49
Thread-1--48
Thread-1--47
Thread-1--46
Thread-1--45
Thread-1--44
Thread-1--43
Thread-1--42
Thread-1--41
Thread-1--40
Thread-1--39
Thread-1--38
Thread-1--37
Thread-1--36
Thread-0--85
Thread-0--37
Thread-0--38
Thread-0--39
Thread-0--40
Thread-0--41
Thread-0--42
Thread-0--43
Thread-0--44
Thread-0--45
Thread-0--46
Thread-0--47
Thread-0--48
Thread-0--49
Thread-0--50
Thread-1--49
Thread-1--48
Thread-1--47
Thread-1--46
Thread-1--45
Thread-1--44
Thread-1--43
Thread-1--42
Thread-1--41
Thread-1--40
Thread-1--39
Thread-1--38
Thread-1--37
Thread-1--36
Thread-1--35
Thread-1--34
Thread-1--33
Thread-1--32
Thread-1--31
Thread-1--30
Thread-1--29
Thread-1--28
Thread-1--27
Thread-1--26
Thread-1--25
Thread-1--24
Thread-1--23
Thread-1--22
Thread-1--21
Thread-1--20
Thread-1--19
Thread-1--18
Thread-1--17
Thread-1--16
Thread-1--15
Thread-1--14
Thread-1--13
Thread-1--12
Thread-1--11
Thread-1--10
Thread-1--9
Thread-1--8
Thread-1--7
Thread-1--6
Thread-1--5
Thread-1--4
Thread-1--3
Thread-1--2
Thread-1--1
Thread-1--0

 

我现在的问题主要是在结果这里
Thread-0--83
Thread-0--84
Thread-1--61
Thread-1--84

Thread-1--36
Thread-0--85
Thread-0--37

从结果看,不是线程安全的.在网上也找了些资料,也没有找到合理的说法.各位大神解答下.在线.谢谢!
------解决方案--------------------
ac.increment();