请教一个关于java多线程的问题

如果一个线程进入了一个同步块或者同步方法,在执行的过程中如果抛出了异常,那这个线程会不会释放被同步对象上的锁?

这个问题问的好。

 如果你用的是jdk1.4或者以下版本,用的是synchronized同步块,那么如果一个线程调用同步方法的时候出现了异常,那么不会释放锁,会进入死锁状态。
jdk1.5以上的版本引入了新的处理方法:lock。
Lock是一个接口,它位于Java 5.0新增的java.utils.concurrent包的子包locks中,实现 Lock接口的类具有与synchronized关键字同样的功能,但是它更加强大一些。lock()方法用于锁定对象,unlock()方法用于释放对对象的锁定,他们都是在Lock接口中定
义的方法。位于这两个方法之间的代码在被执行时,效果等同于被放在synchronized同步块
中。一般用法是将需要在lock()和unlock()方法之间执行的代码放在try{}块中,并且在finally{}块中调用unlock()方法,这样就可以保证即使在执行代码抛出异常的情况下,对象
的锁也总是会被释放,否则的话就会为死锁的产生增加可能。

你可能感兴趣的:(java,多线程)