最近研究线程,同步有可能造成死锁问题,练习了一下哲学家餐桌这个经典deadlock代码.
完整代码
package test.thread.multi.deadLock; /** * 哲学家餐桌问题 */ public class DeadLock_philosopher { public static String str1 ="筷子左"; public static String str2 ="筷子右"; public static void main(String[] args) { new Thread(){ public void run(){ synchronized (str1){ System.out.println("拿到"+str1+"还需要"+str2); synchronized (str2){ System.out.println("拿到"+str2); } } } }.start(); new Thread(){ public void run(){ synchronized (str2){ System.out.println("拿到"+str2+"还需要"+str1); synchronized (str1){ System.out.println("拿到"+str1); } } } }.start(); } } 总结如下: 1.嵌套同步代码块容易造成死锁;
2.锁(也可以称为资源)只能被一方调用,也只能被该方自己释放;当前方不释放对方需要的锁(资源),去获取对方占用的锁(资源),而对方也需要当前方的锁(资源),就会造成死锁;