zoukankan      html  css  js  c++  java
  • 死锁的简单实现

    死锁

    概念

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

    产生原因

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

    解决方法

    • 合理使用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
    
    
  • 相关阅读:
    MongoDB 部署复制集(副本集)
    MongoDB shell 2 副本集方法
    MongoDB shell 1 数据库方法
    MongoDB shell 0 集合方法
    CentOS7 安装 zabbix
    MongoDB Shell db.runCommand
    MongoDB Index
    MongoDB 启动报错
    MongoDB 聚合查询报错
    MongoDB 聚合函数
  • 原文地址:https://www.cnblogs.com/kungFuPander/p/11474977.html
Copyright © 2011-2022 走看看