---------------------- 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培训、期待与您交流! ----------------------
转载于:https://blog.51cto.com/7825719/1283778