死锁

简介:

什么是死锁:
是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁

死锁产生的四个条件
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

案例:

import sun.security.krb5.internal.TGSRep;


public class Test14 implements Runnable {
    public int flag=1;
    static Object o1=new Object(), o2=new Object();

    public static void main(String[] args) {
        Test14 td1=new Test14();
        Test14 td2=new Test14();
        td1.flag=1;
        td2.flag=0;
        Thread t1=new Thread(td1);
        t1.setName("线程一");
        Thread t2=new Thread(td2);
        t2.setName("线程二");
        t1.start();
        t2.start();

    }

    @Override
    public void run() {
        System.out.println("falg"+flag);
        if(flag==1){
            synchronized (o1) {

                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {

                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"在执行操作");
                synchronized (o2) {
                    System.out.println("1");
                }

            }

        }

        if(flag==0){
            synchronized (o2) {

                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {

                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"在执行操作");
                synchronized (o1) {
                    System.out.println("0");
                }

            }

        }

    }




}
目录
相关文章
|
人工智能 JavaScript 前端开发
多角色AI代理的一次尝试- AI代码助手
本文介绍了一个多角色AI代理系统,用于自动化代码开发过程。系统包括用户接口、需求分析、代码结构设计、代码生成、代码审查和代码执行等角色,通过协调工作实现从需求到代码生成与测试的全流程自动化。使用了qwen2.5 7b模型,展示了AI在软件开发中的潜力。
|
存储 监控 Cloud Native
云原生系列Go语言篇-并发 Part 2
既然已经讲解了Go为并发所提供的基础工具,我们就来学习一些并发的最佳实践和模式吧。
156 0
|
Go API 开发工具
Go etcd 的依赖问题终于解决了。。。
Go etcd 的依赖问题终于解决了。。。
|
11月前
|
人工智能 安全 Java
通义灵码 2.0 与 1.0 比较测评反馈
通义灵码 2.0 与 1.0 比较测评反馈
588 10
Vue3空状态(Empty)
这是一个可高度定制化的空状态组件,支持自定义描述内容、描述样式、图片显示方式及样式、底部内容等属性。提供两种预设图片风格(filled/outlined)或自定义图片链接。在线预览与详细代码示例可见[此处](https://themusecatcher.github.io/vue-amazing-ui/guide/components/empty.html)。组件使用了`useSlotsExist`工具函数来判断插槽是否存在。通过简单配置即可实现多样化的展示效果。
252 3
Vue3空状态(Empty)
|
前端开发
走进ES6的世界:基础语法入门指南4
走进ES6的世界:基础语法入门指南
130 0
|
机器学习/深度学习 人工智能 监控
探索深度学习在图像识别中的应用
本文旨在深入探讨深度学习技术在图像识别领域的应用及其带来的变革。我们将通过分析深度学习模型的工作原理,结合具体的案例研究,来揭示这一技术如何提高图像识别的准确性和效率。文章将详细讨论卷积神经网络(CNN)的结构优势、训练技巧以及在不同场景下的应用实例,同时也会指出当前面临的挑战和未来的发展方向。
152 0
|
存储 C语言
C语言函数的返回值
C语言函数的返回值
371 0
|
云计算
阿里云的认证有什么含金量?通过后有什么作用?
因此考证已经成为了很多打工人的首选方法,而对于从事云计算行业的人来说,阿里云的认证绝对是首选。
阿里云的认证有什么含金量?通过后有什么作用?
|
缓存 JavaScript 前端开发
Vue入门
Vue入门
470 0

热门文章

最新文章