Java并发计数器多1
在学习并发。尝试做一个计数器。 然后不知道为什么有时候计数会多1.有时候又不会。请问要怎样才能完成正确的计数。
public class IncrementTest {
static class Counter {
private AtomicInteger count = new AtomicInteger();
public void increment() {
count.incrementAndGet();
}
public int getCount() {
return count.get();
}
}
static Counter c = new Counter();
static class Test implements Runnable{
public void run() {
while (c.getCount() < 100){
c.increment();
}
System.out.println(Thread.currentThread().getName() + ":" + c.getCount());
}
}
public static void main(String[] args) {
Test t = new Test();
Thread test = new Thread(t);
test.start();
Test t2 = new Test();
Thread test2 = new Thread(t2);
test2.start();
}
}
修改后的部分
private static AtomicInteger count = new AtomicInteger();
static class Test implements Runnable{
public void run() {
while (count.incrementAndGet() < 10000){}
System.out.println(Thread.currentThread().getName() + ":" + count);
}
}
但是这样子最后一个结果会多1 ....
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你同步跟原子性搞混了吧,static class Test implements Runnable{
建议使用AtomicInteger 的 incrementAndGet方法
因为,如果两个线程同时执行到while (c.getCount() < 100)的时候,就会出现最后两个线程都执行了+1的操作。
使用incrementAndGet可以保证increse和get两个操作的线程安全
同意楼上的说法