姚博文 使用synchronized同步和用Atomic的差别
来源:互联网 发布:网络柜电气设计 编辑:程序博客网 时间:2024/05/17 10:52
测试使用synchronized同步和AtomicInteger的差别:
public class TestSynchronized {
private int count1 = 0;
public synchronized void addCount1() {
count1++;
}
public synchronized int getCount1() {
return count1;
}
/**
* @param args
*/
public static void main(String[] args) {
Thread[] t = new Thread[10];
TestSynchronized a = new TestSynchronized();
for (int i = 0; i < t.length; i++) {
t[i] = new Thread1(a);
}
long start = System.currentTimeMillis();
for (int i = 0; i < t.length; i++) {
t[i].start();
}
while (true) {
boolean over = true;
for (int i = 0; i < t.length; i++) {
if (t[i].isAlive()) {
over = false;
break;
}
}
if (over) {
break;
}
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}
static class Thread1 extends Thread {
private TestSynchronized a;
public Thread1(TestSynchronized a) {
this.a = a;
}
@Override
public void run() {
for (int i = 0; i < 100000; i++) {
a.addCount1();
if (a.getCount1() == 1000000000) {
break;
}
}
}
}
}
执行时间8422ms
public class TestAtomic {
private AtomicInteger count1 = new AtomicInteger();
public void addCount1() {
count1.addAndGet(1);
}
public int getCount1() {
return count1.get();
}
/**
* @param args
*/
public static void main(String[] args) {
Thread[] t = new Thread[10];
TestAtomic a = new TestAtomic();
for (int i = 0; i < t.length; i++) {
t[i] = new Thread2(a);
}
long start = System.currentTimeMillis();
for (int i = 0; i < t.length; i++) {
t[i].start();
}
while (true) {
boolean over = true;
for (int i = 0; i < t.length; i++) {
if (t[i].isAlive()) {
over = false;
break;
}
}
if (over) {
break;
}
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}
static class Thread2 extends Thread {
private TestAtomic a;
public Thread2(TestAtomic a) {
this.a = a;
}
@Override
public void run() {
for (int i = 0; i < 100000; i++) {
a.addCount1();
if (a.getCount1() == 1000000000) {
break;
}
}
}
}
}
执行时间125ms
这个就是差距.因为Atomic采用的是机器级别的原子指令,在硬件实现
- 姚博文 使用synchronized同步和用Atomic的差别
- java1.5中使用synchronized同步和用Atomic的差别
- Semaphore和synchronized的差别
- volatile,Atomic ,synchronized性能和同步测试程序
- ReentrantLock,Synchronized 和 Atomic
- JAVA多线程同步:volatile,synchronized,Atomic... 比较
- java多线程 synchronized volatile Atomic LOCK的使用
- 锁的粒度:ThreadLocal、volatile、Atomic和Synchronized
- java同步Synchronized的使用
- spring @transactional 和synchronized同时使用不能同步的问题
- synchronized Atomic
- 非阻塞同步方式原子类(Atomic)的使用
- synchronized、volatile、Atomic区别和用法
- 各种同步方法性能比较(synchronized,ReentrantLock,Atomic)
- 各种同步方法性能比较(synchronized,ReentrantLock,Atomic)
- 各种同步方法性能比较(synchronized,ReentrantLock,Atomic)
- 各种同步方法性能比较(synchronized,ReentrantLock,Atomic)
- 线程同步方法、性能比较(synchronized,ReentrantLock,Atomic)
- 验证码在ie7和FF下无法刷新的问题
- firebug调试js代码
- asp.net 实现文件缓存依赖,数据库缓存依赖
- 使用Java Service Wrapper设置tomcat作为linux服务并且开机自动启动
- 一个程序员眼中的中国软件业
- 姚博文 使用synchronized同步和用Atomic的差别
- 转载一篇写得不错的UCOS-II移植文章
- 最便捷、最强大、速度最快的C++序列化框架
- BDF文件格式小结
- 从头安装Buildix
- VC 常用空间以及界面库
- 持久化的 map ,使用 BerkeleyDB
- Erlang不能错过的盛宴
- 爱情不是等你有空才珍惜