zoukankan      html  css  js  c++  java
  • 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();
    }
    }
  • 相关阅读:
    HDU5732 Subway【树重心 树哈希】
    HDU6311 Cover【欧拉路径 | 回路】
    HDU6370 Werewolf 【基环内向树】
    HDU6321 Dynamic Graph Matching【状压DP 子集枚举】
    HDU6331 Problem M. Walking Plan【Floyd + 矩阵 + 分块】
    HDU6403 Card Game【基环树 + 树形DP】
    HDU5691 Sitting in Line【状压DP】
    Codeforces Round #650 (Div. 3)
    2017-2018 ACM-ICPC, NEERC, Northern Subregional Contest
    Codeforces Round #649 (Div. 2)
  • 原文地址:https://www.cnblogs.com/blog-tian/p/15544740.html
Copyright © 2011-2022 走看看