社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
/ ** * Java程序通过强制循环等待来创建死锁。 * * @作者 WINDOWS 8 * * / public class DeadLockDemo { / * *此方法请求两个锁,第一个字符串然后是整数 * /
public void method1() { synchronized (String.class) { System.out.println("Aquired lock on String.class object"); synchronized (Integer.class) { System.out.println("Aquired lock on Integer.class object"); } } }/ * *此方法也请求相同的两个锁,但完全相同 *相反的顺序,即第一个整数,然后是字符串。 *如果一个线程持有字符串锁,则会造成潜在的死锁 *和其他保持整数锁,他们永远等待对方。 * /
public void method2() { synchronized (Integer.class) { System.out.println("Aquired lock on Integer.class object"); synchronized (String.class) { System.out.println("Aquired lock on String.class object"); } } }}
公共 类 DeadLockFixed { / ** *两种方法现在都以相同顺序请求锁定,首先是Integer,然后是String。 *你也可以做反向例如第一个字符串,然后是整数, *只要这两种方法都请求锁定,两者都可以解决问题 *以一致的顺序。 * /
public void method1() { synchronized (Integer.class) { System.out.println("Aquired lock on Integer.class object"); synchronized (String.class) { System.out.println("Aquired lock on String.class object"); } } } public void method2() { synchronized (Integer.class) { System.out.println("Aquired lock on Integer.class object"); synchronized (String.class) { System.out.println("Aquired lock on String.class object"); } } }}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!