您的位置:首页 > 其它

同步块与原子性的耗时比较

2014-01-28 11:30 302 查看
package javaBasic;

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerCompareTest {
private Integer value;
private AtomicInteger atomic;

public AtomicIntegerCompareTest() {
this.value = 0;
atomic = new AtomicInteger(0);
}

void runSync() {
long start = System.currentTimeMillis();

// for (int i = 0; i < 1000000; i++) {
// synchronized (value) {
// value++;
// }
// }
// Synchronized time elapse:63
// 估计每次迭代都会check对象的同步性这个应该会花些时间

/**
* 以下代码与上面的代码有何不同?哪个更加耗时?为什么?
* 你可以打开如下代码试一试,有点意思。
*/
synchronized (value) {
for (int i = 0; i < 1000000; i++) {

value++;
}
}
// Synchronized time elapse:31
// check同步性在迭代之外,迭代没有消耗时间。

long end = System.currentTimeMillis();
System.out.println("Synchronized time elapse:" + (end - start));
}

void runAtomic() {
long start1 = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
atomic.incrementAndGet();
}
long end1 = System.currentTimeMillis();
System.out.println("AtomicInteger time elapse:" + (end1 - start1));
// AtomicInteger time elapse:31
}

public static void main(String args[]) {
final AtomicIntegerCompareTest test = new AtomicIntegerCompareTest();
new Thread() {
@Override
public void run() {
test.runSync();

}
}.start();

new Thread() {
@Override
public void run() {
test.runAtomic();
}
}.start();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息