- 浏览: 3314 次
- 性别:
- 来自: 杭州
最近访客 更多访客>>
文章列表
一直以来,都对原子操作和并发安全都有些误解,认为一个操作不是原子的,那它就不是并发安全的,这样以来,就迟疑了,这么说来:
C语言一个简单的赋值语句也不是原子的咯? a = b是否是原子操作? 见代码如下:
int main() {
int a = 0;
int b = 2;
a = b;
}
编译这段代码: g++ -c -g -Wa,-adlhn Assign.c > Assign.asm
可以发现(只显示a = b部分asm码):
movl -8(%ebp), %eax
movl %eax, -4(%ebp)
大家看,它由两条汇编指令 ...
经过JDK1.6对synchronized的进一步优化,通常情况下,synchronized与lock & unlock 效率差别不大,如果大家做一下简单实验应该不容易得出,见http://www.blogjava.net/killme2008/archive/2007/09/14/145195.html中的实验,但在做下面这个实验时,发现两者效率上还是有些区别的。
这是一个最简单的阻塞队列的实现,分别采用synchronized和ReentrantLock来实现,代码如下:
public interface Queue<E> {
public void ...