关于Java多线程的问题

2025-04-15 10:09:25
推荐回答(2个)
回答1:

这个问题问的好。

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

你可以查看下1.5的API。
请参考

回答2:

线程要启动才能中断,否则如你上面所说的直接调用没有任何意义。不过编译也不会报错,这时候你用isInterrupted查看结果会是false