• Java 模拟死锁


    //想理解死锁,就必须得搞懂锁的底层实现(粗略记下:锁这个对象,就是去找个对象拿东西,拿到了就能进去)
    //然后看代码

    public class Test1 {
    public static void main(String[] args) {
    String source1 = "资源一";
    String source2 = "资源二";
    new Thread(()->{
    synchronized (source1) {
    System.out.println(Thread.currentThread().getName() + "(王室后人):得到了" + source1);
    System.out.println("主角1:得瑟一会,稍后再去攻打"+source1+" (举杯庆祝,轻歌艳舞,好不快活)");
    //观众A:唉 你非得等别人拿到了你再去,明明可以抢先一步
    //观众B: A 别说废话啊,不这样搞,那戏还演不演
    //......
    try {
    Thread.sleep(200);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    System.out.println("前辈们!我错了哇,你们把路为我铺好,我却如此,即使站在巨人的肩膀上又如何啊! 内心独白:努力,不懈怠,不骄不馁 才是沧桑大道");

    synchronized (source2) {
    System.out.println("唉 骄兵必败,你到不了我这喽");
    }
    }
    },"主角1").start();

    //主角登场
    new Thread(()->{
    synchronized (source2){
    System.out.println(Thread.currentThread().getName()+"(起义者):得到了"+source2);
    System.out.println("冲杀,给我拿下"+source1);
    //观众 A: 明主啊 可惜可惜可惜 source1已被别人拿去
    //......
    System.out.println("2000 year 以后");
    System.out.println("为何! 我拼死来到此处,这是为何...,你懈怠倒是无妨,可你害我身后这些子民无处可归啊!(吐血而亡)");


    synchronized (source1){
    System.out.println("唉 可惜了,我被那傲慢之人拿去了,自己懈怠却害了众人");
    }
    }
    },"主角2").start();
    }
    }
  • 相关阅读:
    git
    centos7安装python3和ipython
    centos7 安装mysql5.7
    ceph-文件存储
    ceph-对象存储
    ceph-块存储客户端
    ceph-简介及安装(luminous)版
    centos7 kvm安装使用
    webpack多页面应用打包问题-新增页面打包JS影响旧有JS资源
    webpack4.0 babel配置遇到的问题
  • 原文地址:https://www.cnblogs.com/blog-tian/p/15544740.html
Copyright © 2020-2023  润新知