(* ̄m ̄) 2014-07-18 00:10
浏览 249
已采纳

多线程

多线程出现死锁的原理是什么样的呀!能写个列子吗?感谢!

  • 写回答

3条回答 默认 最新

  • iteye_11009 2014-07-18 00:32
    关注

    发生死锁的原因一般是两个对象的锁相互等待造成的。

    那么为什么会产生死锁呢?
    1.因为系统资源不足。
    2.进程运行推进的顺序不合适。

    3.资源分配不当。

    学过操作系统的朋友都知道:产生死锁的条件有四个:
    1.互斥条件:所谓互斥就是进程在某一时间内独占资源。
    2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
    3.不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。
    4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

    package cn.com.wangxiuwei.test;

    public class TestThread implements Runnable {
    private int istrue = 1;
    private Object obj1 = new Object();
    private Object obj2 = new Object();

    public void run() {
    
        if (istrue == 1) {
            synchronized (obj1) {
                System.out.println("我已经锁定obj1,休息0.5秒后锁定obj2去!");
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (obj2) {
                    System.out.println("1");
                }
            }
        }
        if (istrue == 0) {
            synchronized (obj2) {
    
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (obj1) {
                    System.out.println("0");
                }
            }
        }
    }
    
    public static void main(String[] args) {
        TestThread  testThread1= new TestThread();
         TestThread testThread2 = new TestThread();
         testThread1.istrue  = 1;
         testThread2.istrue  = 0;
        Thread thread1 = new Thread(testThread1);
        Thread thread2 = new Thread(testThread2);
        System.out.println("线程开始!");
        thread1 .start();
        thread2 .start();
    }
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器