java线程同步原理及wait,notify的用法及与sleep的区别

java线程同步原理及wait,notify的用法及与sleep的区别


1.java线程同步原理
(1)java会为每个object对象分配一个monitor,当某个对象的同步方法(synchronized methods )被多个线程调用时,该对象的monitor将负责处理这些访问的并发独占要求。
(2)当一个线程调用一个对象的同步方法时,JVM会检查该对象的monitor。如果monitor没有被占用,那么这个线程就得到了monitor的占有 权,可以继续执行该对象的同步方法;如果monitor被其他线程所占用,那么该线程将被挂起,直到monitor被释放。
(3)每个java对象都有一把锁, 当有多个线程同时访问共享资源的时候, 需要Synchronize 来控制安全性, synchronize 分 synchronize 方法 和synchronize块,使用synchronize块时, 一定要显示的获得该对象的锁(如synchronize(object))而方法则不需要。


解析说明:
1.每个对象都有一个自身的lock,当调用同步方法时(synchronize(object)获得该对象的锁),如果拿不到这个对象锁的线程就会挂起直到得到这个锁。
2.wait调用时会在线程挂起时先释放这个对象的锁
3.notify,当另一个线程访问同步后可以调用notify唤醒调用wait方法挂起的线程。
4.sleep()函数是Thread类的静态函数,不涉及到线程间同步概念,仅仅为了让一个线程自身获得一段沉睡时间。不会释放对象锁(如果上锁了的话)


参考(java线程同步原理及wait,notify的用法及与sleep的区别 ): http://blog.sina.com.cn/s/blog_4a7afc9f0100tmzw.html
参考(java线程的wait方法和notify方法的运用 ): http://blog.csdn.net/liranke/article/details/12222265
参考(Java线程同步 (synchronized wait notify) ): http://blog.csdn.net/weizhaozhe/article/details/3922647

猜你喜欢

转载自huangyongxing310.iteye.com/blog/2347926