1.死锁问题:
死锁是由于一个线程锁住一个资源A,等待另一个B;而另一个线程锁住资源B,等待资源A造成的资源竞争引起的问题。
例如:一个死锁的例子:
package Thread; /** * 测试死锁 *思路:两个线程,每个线程占有不同的资源,等待其他资源 * @author: qlq * @date : 2018年6月14日上午10:37:24 */ public class DeadLockTest { public static void main(String[] args) { MyThread t1 = new MyThread(true); MyThread t2 = new MyThread(false); t1.start(); t2.start(); } } class MyThread extends Thread{ private boolean flag;//标记走哪个线路 static Object A = new Object();//资源A static Object B = new Object();//资源B public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } protected MyThread(boolean flag) { super(); this.flag = flag; } @Override public void run() { if(flag){//占有资源A,等待资源B synchronized(A){ System.out.println("占有资源A,等待资源B"); synchronized(B){ System.out.println("占有资源B"); } } }else{//占有资源B,等待资源A synchronized(B){ System.out.println("占有资源B,等待资源A"); synchronized(A){ System.out.println("占有资源A"); } } } } }
结果:
占有资源B,等待资源A
占有资源A,等待资源B
解决办法:最好在一个代码快中对一个对象进行同步上锁,避免重复锁资源。。。。。。。。。。。。。。。。。。。。