线程同步和异步问题-Java

来源:互联网 发布:手机上用office 知乎 编辑:程序博客网 时间:2024/05/04 21:39

》 Java 并发编程:核心理论:  http://www.cnblogs.com/paddix/p/5374810.html
Java并发编程:Synchronized及其实现原理: http://www.cnblogs.com/paddix/p/5367116.html
Java并发编程:Synchronized底层优化(轻量级锁、偏向锁): http://www.cnblogs.com/paddix/p/5405678.html
Java 并发编程:线程间的协作(wait/notify/sleep/yield/join):http://www.cnblogs.com/paddix/p/5381958.html
Java 并发编程:volatile的使用及其原理:http://www.cnblogs.com/paddix/p/5428507.html

》 同步并没有通过指令monitorenter和monitorexit来完成(理论上其实也可以通过这两条指令来实现),不过相对于普通方法,其常量池中多了ACC_SYNCHRONIZED标示符。JVM就是根据该标示符来实现方法的同步的:当方法调用时,调用指令将会检查方法的 ACC_SYNCHRONIZED 访问标志是否被设置,如果设置了,执行线程将先获取monitor,获取成功之后才能执行方法体,方法执行完后再释放monitor。在方法执行期间,其他任何线程都无法再获得同一个monitor对象。 其实本质上没有区别,只是方法的同步是一种隐式的方式来实现,无需通过字节码来完成。

》 最简单的区别是,wait方法依赖于同步,而sleep方法可以直接调用。而更深层次的区别在于sleep方法只是暂时让出CPU的执行权,并不释放锁。而wait方法则需要释放锁。





0 0