死锁编码和定位分析

package ttzz.juc.juc2;
/**
 * 第55讲  死锁编码和定位分析
 * 1.什么是死锁?
 *  指两个或者两个以上的进程在执行过程中,因争夺资源而造成的互相等待的现象,若无外力干预,他们将持续性的耗下去,
 *  如果系统资源充足,进程的资源请求都能得到满足,死锁出现的可能性低,否则就会因为争夺有限的资源而陷入死锁
 *  2. 造成死锁的原因:
 *   1)系统资源不足
 *   2)代码问题
 *   3)内存分配不合理
 */
public class ThreadPool_55 {
	public static void main(String[] args) {
		String lockA = "lockA";
		String lockB = "lockB";
		new Thread(new LockThread(lockA,lockB),"ThreadAAA").start();
		new Thread(new LockThread(lockB,lockA),"ThreadBBB").start();
		
		/**
		 * 查看进程
		 * linux  ps -ef|grep XXX  ;ls -l
		 * windows :jps -l  找到进程编号 ;jstack pid
		 */

	}
}
class LockThread implements Runnable{
	private String lockA;
	private String lockB;
	public LockThread(String lockA, String lockB) {
		super();
		this.lockA = lockA;
		this.lockB = lockB;
	}
	@Override
	public void run() {
		synchronized (lockA) {
			System.out.println(Thread.currentThread().getName()+":占有锁:"+lockA+",尝试获得锁"+lockB);
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized (lockB) {
				System.out.println(Thread.currentThread().getName()+":占有锁:"+lockB+",尝试获得锁"+lockA);
			}
		}
	}
	
}


Guess you like

Origin blog.csdn.net/weixin_39472101/article/details/117559292