您的位置:首页 > 其它

Atomic或Synchronized实现多线程计数器

2012-06-18 10:18 363 查看
多线程会带来主要两方面问题,一是顺序性,二是可见性。顺序性问题是指多个线程对资源访问的有序性;可见性是指某线程完成对资源的修改后,其他线程是否立即可知。这周写了个多线程计数器,最开始天真的认为不用加锁,认为A线程和B线程谁先加1无所谓,不存在资源访问顺序的问题,但内存可见性的问题如果不采取措施就会出问题。后来想到两个解决方案,一是synchronized, 二是Atomic。synchronized开销大,volatile应用场景不对,推荐用开销更小的Atomic。

public class TableStatistics {

private String programName; // store last call program name
private int getCounter;
private int getNextCounter;
private int addrCounter;
private int findCounter;

public synchronized int incrementGet() {
return ++getCounter;
}

public synchronized int incrementGetNext() {
return ++getNextCounter;
}

public synchronized int incrementAddr() {
return ++addrCounter;
}

public synchronized int incrementFind() {
return ++findCounter;
}
}


public class TableStatistics {

private String programName; // store last call program name
private AtomicInteger getCounter = new AtomicInteger();
private AtomicInteger getNextCounter = new AtomicInteger();
private AtomicInteger addrCounter = new AtomicInteger();
private AtomicInteger findCounter = new AtomicInteger();

public int incrementGet() {
return getCounter.incrementAndGet();
}

public int incrementGetNext() {
return getNextCounter.incrementAndGet();
}

public int incrementAddr() {
return addrCounter.incrementAndGet();
}

public int incrementFind() {
return findCounter.incrementAndGet();
}
}


如若转载,请说明出处!http://blog.csdn.net/xukunddp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐