---------------------- android培训、java培训、期待与您交流! ----------------------

 

 

 

java线程死锁

 

 

/*线程死锁是指相互等待对方持有的资源时产生的一种特殊的情况
。一个线程需要申请一个资源才能继续执行,但是当前资源被另一个
线程占有,同时这个线程在等待当前线程占有的某个资源,这样二者
就相互等待对方释放资源,即都处于等待状态,显示这种状态会无限进行
下去。*/
//下面通过一个简单的示例来描述死锁的问题
class Resource  //资源类
{
  String resoureName; //资源名
  Resource(String name)
  {
this.resoureName=name;
  }

class MyThread10 implements Runnable  //实现Runnable接口
{
  Resource rs1;   //线程1需要的资源
  Resource rs2;   //线程2需要的资源
  String name;
  MyThread10(Resource rs1,Resource rs2,String name)
  {
this.rs1=rs1;
this.rs2=rs2;
this.name=name;
  }
  //run方法有两个同步块语句,只有它同时占有两个资源的锁时才能执行完毕
  public void run()
  {
synchronized(rs1)  //对资源1同步锁定
{
  System.out.println(this.name+"获得 "+rs1.resoureName);
  try
  {
Thread.sleep(1000);  //线程休眠
  }
  catch(InterruptedException e)
  {
e.printStackTrace();
  }
  System.out.println(this.name+"等待 "+rs2.resoureName+"释放");
  synchronized(rs2)  //对资源2同步锁定
  {
System.out.println(this.name+"获得 "+rs2.resoureName);
try
{
  Thread.sleep(1000);  //线程休眠
}
catch(InterruptedException e)
{
  e.printStackTrace();
}
  }
}
  }
}
public class DeadlockDemo
{
  public static void main(String[] argv)
  {
//创建资源对象
Resource rs1=new Resource("资源1");
Resource rs2=new Resource("资源2");
Resource rs3=new Resource("资源3");
//创建三个实现Runnable接口的对象
MyThread10 ms1=new MyThread10(rs1,rs2,"线程1");
MyThread10 ms2=new MyThread10(rs2,rs3,"线程2");
MyThread10 ms3=new MyThread10(rs3,rs1,"线程3");
//创建线程
Thread t1=new Thread(ms1);
Thread t2=new Thread(ms2);
Thread t3=new Thread(ms3);
//启动线程
t1.start();
t2.start();
t3.start();
  }
}

 

 

 

 

---------------------- android培训、java培训、期待与您交流! ----------------------