Java全部课件分析.ppt

多线程的同步和通信 synchronized也可以修饰语句块,synchronized修饰的语句块称为同步代码块。 synchronized修饰同步代码块时,必要要对某一个对象加锁才能同步,所以需要一个对象;如synchronized(this){..}或synchronized(o){..} o为Object对象 This代表当前对象,只有拿到当前对象或对象o的锁标记的线程才能进入同步代码块执行 锁池 线程想要调用同步方法或进入同步代码块执行,必须要拿到对象的锁标记,如果拿不到对象的锁标记则现程就会被堵住暂停,那么这些被堵住的线程在哪里呢?他们会在对象的锁池里 锁池是一个空间,每个对象都有,存放等待该对象锁标记的线程 对象o有一个同步代码块,如synchronized(o){..}当线程还没有拿到对象o的锁标记时,则就会被阻塞在对象o的锁池里等待;当另一个线程释放了该对象o的锁标记后,则在锁池中的很多线程会去争拿锁标记,其中只有一个线程可以拿到锁标记,进入运行状态。那么在锁池中的其他多个线程到底谁先拿到锁标记呢?这是由操作系统决定的,随机的。 在java中,一个线程可以同时拿到多个对象的锁标记,所以同步代码块是可以嵌套的。如:synchronized(o1){..synchronized(o2){…}..} 死锁的产生、原因和特性 在一个线程进入锁池后不会释放任何它已拥有的锁标记

文档评论(0)

1亿VIP精品文档

相关文档