業とデッドロックさせるコード
package lesson.java.lang; public class ThredDeadLockTest { static LockObject lockObjA = new LockObject("lockObjA"); static LockObject lockObjB = new LockObject("lockObjB"); public static void main(String[] args) throws InterruptedException { Thread th = new Thread("TH_A") { public void run() { synchronized (lockObjA) { lockObjA.lock(); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lockObjB) { lockObjB.lock(); } lockObjB.unlock(); } lockObjA.unlock(); } }; th.start(); synchronized (lockObjB) { lockObjB.lock(); Thread.sleep(50); synchronized (lockObjA) { lockObjA.lock(); } lockObjA.unlock(); } lockObjB.unlock(); System.out.println("無事デッドロックしませんでした。"); } } class LockObject { private String name; public LockObject(String name) { this.name = name; } public void lock() { Thread cth = Thread.currentThread(); System.out.println(cth.getName() + " " + name + " Lock"); } public void unlock() { Thread cth = Thread.currentThread(); System.out.println(cth.getName() + " " + name + " Unlock"); } }
結果は以下のようになりました。
main lockObjB Lock
TH_A lockObjA Lock