死锁问题
在编写多线程代码时一定要注意避免死锁,发生死锁原因就是两个或多个线程都在等待对方释放锁导致,下面通过代码来演示一下死锁情况。
package com.sutaoyu.DeadThread; public class DeadThread { private static Object obj1 = new Object(); private static Object obj2 = new Object(); public static void main(String[] args) { Thread t1 = new Thread() { public void run() { synchronized(obj1) { System.out.println(this.getName() + "======obj1"); synchronized(obj2) { System.out.println(this.getName() + "======obj2"); } } } }; Thread t2 = new Thread() { public void run() { synchronized(obj1) { System.out.println(this.getName() + "======obj1"); synchronized(obj2) { System.out.println(this.getName() + "======obj2"); } } } }; t1.start(); t2.start(); } }
上面使用了同步代码嵌套来演示了死锁,实际开发中不仅是这种嵌套才会发生死锁,所以一定要注意避免。