IT技术CAS详解程序员

Java练级打怪路----synchronized对比cas

2016-11-25  本文已影响871人  chanming

前言

这篇文章的营养非常有限,只是一个夜黑风高的晚上,突发奇想,如果我要统计一个网站的PV,程序应该怎么写呢?

一种挫逼的写法


这是一种无锁的写法,很明显,这个东西是线程不安全的。我们使用12个线程,每个线程执行 108次方add的操作,发现最终的结果并没有得到期望的1.2*109次方。

上面一个是总数,下面一个是所消耗的时间。

synchronized VS cas

很明显,我们需要一个锁来干这个事情。

synchronized

synchronized关键字,是Java中一个同步锁,主要有一下几种用法:

cas

compareAndSet,如果之前了解过C语言或者操作系统,相信对cas不会太陌生,这是一个原子方法。Java中我们可以使用sun.misc.Unsafe#compareAndSwapLong这个方法。


对比

线程数 synchronized耗时(ms) cas耗时(ms) 方法三(ms)
1 296 142 92
4 2749 2611 999
8 5797 4845 1851
16 11223 10192 3702
32 14949 20009 7779
64 31415 39974 13784

发现

上一篇 下一篇

猜你喜欢

热点阅读