同步锁跟互斥锁的区别

同步锁和互斥锁的区别
多线程的同步锁和互斥锁有啥区别
本人菜鸟,面试时候遇到的,望各位大侠不吝赐教同步锁跟互斥锁的区别
------解决思路----------------------
同步分为两种:
1、互斥同步(也叫阻塞同步):它是一种悲观的加锁方式,它认为如果从在并发,如果不加锁就会出现问题。事实上很多时候虽然并发执行,但是不应定产生问题。
2、非阻塞同步:是一个基于冲突检测的乐观并发策略,就是先操作,如果没有其他数据争共享数据,那讲究成功了;如果有共享数据争用,产生冲突,那就再用其它方式补救,常用的方式就是不断重试,知道成功,这种乐观并发的策略许多实现都不需要把线程挂起,所以叫非阻塞同步。
为什么说同步比较耗性能,是因为线程的阻塞和唤醒会带来系统的性能开销,随着cpu指令的丰富,越来越多的非阻塞同步的实现,让锁机制的性能有了很好的提升,新的jdk提供了一些新锁实现,尽力来消除锁带来的性能问题,比如自旋锁,适应性自选锁,锁消除,轻量级锁,偏向锁等等。

可以参考深入理解java虚拟机 这个书 或者看看jvm规范,官方下载英文版的。
官方英文版:http://docs.oracle.com/javase/specs/jvms/se7/html/
周志明翻译的:http://www.tools138.com/create/book/20140215/235500062.html