---------------------- 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培训、期待与您交流! ----------------------