Java多线程死锁案例中,如何避免线程间相互等待导致的长尾词死锁问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计225个文字,预计阅读时间需要1分钟。
线程6占用线程7需要的资源,线程7占用线程6需要的资源,最终导致死锁。
javapackage cn.mym.thread;
public class TestExclusionThread { static Object obj1=new Object(); static Object obj2=new Object();
public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { synchronized (obj1) { System.out.println(Thread6 等待获取 obj2 的锁); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (obj2) { System.out.println(Thread6 获取到 obj2 的锁); } } } }).start();
new Thread(new Runnable() { @Override public void run() { synchronized (obj2) { System.out.println(Thread7 等待获取 obj1 的锁); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (obj1) { System.out.println(Thread7 获取到 obj1 的锁); } } } }).start(); }}
thread6占用thread7需要的资源,thread7占用thread6需要的资源,最终导致死锁package cn.mym.thread; public class TestExclusionThread { static Object obj1 = new Object(); static Object obj2 = new Object(); public static void main(String[] args) { Thread6 t1 = new Thread6(); Thread7 t2 = new Thread7(); t1.start(); t2.start(); //System.out.println("ashfkdhsf"); } static class Thread6 extends Thread{ @Override public void run() { synchronized(obj1){ System.out.println("obj1锁住了"); synchronized(obj2){ //锁住obj2 } } } } static class Thread7 extends Thread{ @Override public void run() { synchronized(obj2){ System.out.println("obj2锁住了"); synchronized(obj1){ //锁住obj1 } } } } }
本文共计225个文字,预计阅读时间需要1分钟。
线程6占用线程7需要的资源,线程7占用线程6需要的资源,最终导致死锁。
javapackage cn.mym.thread;
public class TestExclusionThread { static Object obj1=new Object(); static Object obj2=new Object();
public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { synchronized (obj1) { System.out.println(Thread6 等待获取 obj2 的锁); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (obj2) { System.out.println(Thread6 获取到 obj2 的锁); } } } }).start();
new Thread(new Runnable() { @Override public void run() { synchronized (obj2) { System.out.println(Thread7 等待获取 obj1 的锁); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (obj1) { System.out.println(Thread7 获取到 obj1 的锁); } } } }).start(); }}
thread6占用thread7需要的资源,thread7占用thread6需要的资源,最终导致死锁package cn.mym.thread; public class TestExclusionThread { static Object obj1 = new Object(); static Object obj2 = new Object(); public static void main(String[] args) { Thread6 t1 = new Thread6(); Thread7 t2 = new Thread7(); t1.start(); t2.start(); //System.out.println("ashfkdhsf"); } static class Thread6 extends Thread{ @Override public void run() { synchronized(obj1){ System.out.println("obj1锁住了"); synchronized(obj2){ //锁住obj2 } } } } static class Thread7 extends Thread{ @Override public void run() { synchronized(obj2){ System.out.println("obj2锁住了"); synchronized(obj1){ //锁住obj1 } } } } }

