• 死锁的简单实现


    死锁

    概念

    • 过度同步,二个或二个以上的线程互相持有对方的锁,又不愿释放对方的锁。

    产生原因

    • 资源不足
    • 资源分配不当
    • 进程推进的顺序不当

    解决方法

    • 合理使用synchronized关键字

    代码示例

    public class Runner implements Runnable{
    	
    	private int flag;
    	private static Object object1 = new Object(),object2 = new Object();
    	
    	public Runner(int flag) {
    		this.flag = flag;
    	} 
    	
    	public void run() {
    		
    		if (flag == 1) {
    			System.out.println("a开始搞事情");
    			synchronized (object1) {
    				System.out.println("休息0.5秒后我要去搞b");
    				try {
    					Thread.sleep(500);
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    				synchronized (object2) {
    					System.out.println("我锁定了b");
    				}
    			}
    		}
    		
    		if (flag == 0) {
    			System.out.println("b开始搞事情");
    			synchronized (object2) {
    				System.out.println("休息0.5秒后我要去搞a");
    				try {
    					Thread.sleep(500);
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    				synchronized (object1) {
    					System.out.println("我锁定了a");
    				}
    			}
    		}
    		
    		System.out.println("Game Over!");
    		
    	}
    
    }
    
    // 调用
    public class DeadLockTest {
    	
    	public static void main(String[] args) {
    		Runner r1 = new Runner(1);
    		Runner r2 = new Runner(0);
    		Thread t1 = new Thread(r1);
    		Thread t2 = new Thread(r2);
    		t1.start();
    		t2.start();
    	}
    }
    
    // 输出
        b开始搞事情
        a开始搞事情
        休息0.5秒后我要去搞a
        休息0.5秒后我要去搞b
    
    
  • 相关阅读:
    2019秋季 关于C语言指针等探索
    第四次作业
    第三次作业
    错误总结
    第二次作业
    第一次随笔
    Linux Mint安装Docker踩坑指南
    浅论Javascript在汽车信号测试中的应用
    [瞎玩儿系列] 使用SQL实现Logistic回归
    MongoDB的账户与权限管理及在Python与Java中的登录
  • 原文地址:https://www.cnblogs.com/kungFuPander/p/11474977.html
Copyright © 2020-2023  润新知