黑马程序员技术交流社区
标题:
死锁的问题求解
[打印本页]
作者:
杨芳
时间:
2013-1-30 15:02
标题:
死锁的问题求解
本帖最后由 张向辉 于 2013-1-31 22:16 编辑
多线程中死锁是怎么形成的,怎么解决这个问题,那位高手指教一下,举一个简例,谢谢!
作者:
黄鸿达
时间:
2013-1-30 15:17
2个线程同时开启 , 线程T1拿了1号锁进入以后,又发现一个需要2号锁才可以进入的方法,与此同时线程T2在线程T1拿了1号锁的时候遇到一个需要2号锁的方法,T2拿了2号锁之后,又发现需要1个需要1号锁的方法,结果2个线程都拿着他们各自目前需要的锁,争持不下,于是形成死锁
给个代码参考
public class 死锁 {
public static void main(String[] args) {
Book b=new Book();
Thread t1=new Thread(b);
Thread t2=new Thread(b);
t1.start();
b.is=false;
t2.start();
}
}
class Book implements Runnable{
int bookNo=1000;
boolean is=true;
Object obj=new Object();
public void run(){
if(is){
while(true){
//T1进来进来 拿OBJ锁到show方法前,想开show方法但是没this锁
synchronized(obj){
show();
}
}
}
else{
while(true)
show();
}
}
//t2也进来来走到show进去拿到show方法的this锁但是需要obj锁
synchronized void show(){
synchronized(obj){
if(bookNo>0)
{
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"---"+bookNo--);
}
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2