java学到死锁了,有几个问题不懂:
1.锁住了一个方法,另外一个死锁的方法不能运行?2.如果是这样,如何发生死锁?一个死锁方法调用1,2方法,用一个死锁方法调用2,1,如何实现死锁?

解决方案 »

  1.   

    死锁是一个线程争取一个资源,而其他线程不肯定释放同一资源的时候发生的,互不相让,这里有个例子,供你参考:public class AnotherDeadLock
    {    public static void main(String[] args) {
            final Object resource1 = "resource1";
            final Object resource2 = "resource2";
            Thread t1 = new Thread() {
              public void run() {
                //锁住resource 1
                synchronized (resource1) {
                  System.out.println("Thread 1: locked resource 1");              try {
                    Thread.sleep(50);
                  } catch (InterruptedException e) {
                  }
                  //试图再去锁resource2,但已被t2锁住,获取不到
                  synchronized (resource2) {
                    System.out.println("Thread 1: locked resource 2");
                  }
                }
              }
            };        Thread t2 = new Thread() {
              public void run() {
                  //锁住resource2
                synchronized (resource2) {
                  System.out.println("Thread 2: locked resource 2");              try {
                    Thread.sleep(50);
                  } catch (InterruptedException e) {
                  }
                //试图再去锁resource1,但已被t1锁住,获取不到
                  synchronized (resource1) {
                    System.out.println("Thread 2: locked resource 1");
                  }
                }
              }
            };
            t1.start(); //只有t1执行不会发生死锁
            t2.start();//同时执行,就会发生死锁
        }
    }