• 2020年9月12日 线程死锁现象


    package com.atguigu.test13;
    /*
     * 死锁:
     *   两个线程,互相持有,占有对方想要的锁,不放手。
     */
    public class TestDeadLock {
        public static void main(String[] args) {
            Object g = new Object();
            Object m = new Object();
            
            Boy b = new Boy(g,m);
            Bang bang = new Bang(g,m);
            
            b.start();
            bang.start();
        }
    }
    //男朋友
    class Boy extends Thread{
        private Object girl;
        private Object money;
        
        public Boy(Object girl, Object money) {
            super();
            this.girl = girl;
            this.money = money;
        }
    
        public void run(){
            synchronized (money) {
                System.out.println("你放了我女朋友,我给你500万");
                synchronized (girl) {
                    System.out.println("给了对方500万");
                }
            }
        }
    }
    //绑匪
    class Bang extends Thread{
        
        private Object girl;
        private Object money;
        
        public Bang(Object girl, Object money) {
            super();
            this.girl = girl;
            this.money = money;
        }
    
        public void run(){
            synchronized (girl) {
                System.out.println("你给我500万,我放了你女朋友");
                synchronized (money) {
                    System.out.println("放人");
                }
            }
        }
    }

    如上两个线程都是同步的同一个属性girl和money,只是同步的顺序不一样,当线程一同步了money而此时线程二同步了girl,两个线程处于僵持状态互相不能执行下去,

    这个现象就是死锁状态。

  • 相关阅读:
    JAVA调用WebService总结
    关于购物车的想法
    ASP.NET中初试Ajax
    转帖:从FxCop归纳出来的一些规范建议
    数据结构(二叉树)C#描述
    FormView控件和DetailsGridView控件实现MasterSlave
    在.NET中使用MySql数据库
    Oracle学习总结1
    Oracle学习总结2
    关于字符匹配所引起的的问题
  • 原文地址:https://www.cnblogs.com/douyunpeng/p/13656955.html
Copyright © 2020-2023  润新知