zoukankan      html  css  js  c++  java
  • 写一个死锁

    死锁产生的原因:

    一个线程进入锁一需要锁二,

    另一个线程进入锁二需要锁一,

    由于锁一锁二都被占了,所以线程执行不下去。

    所以只需写一个相互交叉的锁一锁二就可以产生死锁。

    class sisuogoucheng implements Runnable
    {
      private boolean panduan=true;

      sisuogoucheng(boolean panduan)
      {
        this.panduan=panduan;  //写一个判断条件使线程进入不同的锁。
      }


      public void run()

      {    

        if(panduan)

        {
          synchronized(mykey.obj1)
          {
            System.out.println("t1----obj1");
            synchronized(mykey.obj2)
            {
              System.out.println("t1------obj2");
            }
          }
        }
        else
        {
          synchronized(mykey.obj2)
          {
            System.out.println("t2-------obj2");
            synchronized(mykey.obj1)
            {
              System.out.println("t2---------obj1");
            }
          }
        }
      }
    }

    class mykey
    {
      static Object obj1=new Object();  //创建两个不同的锁
      static Object obj2=new Object();
    }

    public class sisuo

    {

      public static void main(String[] args)

       {

        Thread t1=new Thread(new sisuogoucheng(true));
        Thread t2=new Thread(new sisuogoucheng(false));

        t1.start();
        t2.start();
      }

    }

  • 相关阅读:
    结合P2P软件使用Ansible分发大文件
    Centos7 上安装 FastDFS
    go在centos配置以及go mod配置
    代理
    笔记本安装ubuntu18.08,解决过程中出现的各种问题
    CentOS7设置自定义开机启动脚本,添加自定义系统服务
    gitlab忘记密码找回
    zabbix配置短信报警
    将博客搬至CSDN
    RT-Thread-stm32f769-qspi-flash移植
  • 原文地址:https://www.cnblogs.com/shenhengjia/p/9129779.html
Copyright © 2011-2022 走看看