库调多了,都忘了最基础的概念-《死锁与范式的碰撞》

简介: 库调多了,都忘了最基础的概念-《死锁与范式的碰撞》

🍁 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家

📌 擅长领域:全栈工程师、爬虫、ACM算法

💒 公众号:知识浅谈

🔥 联系方式vx:zsqtcc

🤞拿下,拿下🤞

温馨提醒:这篇文章涉嫌为平台原创文章,请收藏观看

🎈死锁产生的原因有哪些?

满足死锁的四个条件

资源互斥:在同一时刻,同一资源只能被一个线程使用。

不可剥夺:资源是不可剥夺的,在资源被其他线程占有的时候,资源不可被剥夺。

请求保持:在线程请求其他资源的时候,一直持有已经占有的资源。

循环等待:在不同线程之间,分别占有着其他线程请求获取的资源,形成了循环请求,就造成了循环等待。

🎈死锁的排查工具有哪些?

jstack:jstack -l 进程id 查看死锁

jconsole:一种客户端工具

jvisualvm:一种客户端工具

🎈说一下 JUC 中的 Exchange 交换器?

Exchange是用来两个线程交换数据的。

Exchange 交换器是用来实现两个线程间的数据交换的,Exchanger 可以交互任意数据类型的数据,只要在创建的时候定义泛型类型即可。它的核心方法为 exchange,当线程执行到此方法之后,会休眠等待另一个线程也进入交换点,如果另一个线程也进入了交换点(也执行到了 exchange 方法),此时二者会交换数据,并执行后续的流程。

举🌰:

public class Main {
    private static Exchanger<String> exchange = new Exchanger<>();
    public static void main(String[] args) throws ExecutionException, InterruptedException {
      new Thread(()->{
          try {
              Thread.sleep(1000);
              String money="1毛钱";
              String exchange1 = exchange.exchange(money);
              System.out.println("张三花了"+money+"买了个"+exchange1);
          } catch (InterruptedException e) {
              throw new RuntimeException(e);
          }
      }).start();
        new Thread(()->{
            try {
                Thread.sleep(2000);
                String girl="小姐姐";
                String exchange1 = exchange.exchange(girl);
                System.out.println("卖家卖了个"+girl+"收款"+exchange1);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }).start();
    }
}

🎈什么是三范式?它有什么用?

范式是数据库中的一种约束,分别包括一范式,二范式,三范式,BC范式。

一范式:所有的字段都是原子性的,不可分的。

二范式:对于主键,非主键不能有部份依赖,就是需要通过所有的主键才可推出非主键。

三范式:不能存在传递依赖,A推出B,B推出C。

BC范式:每个属性都不部分依赖于候选键也不传递依赖于候选键。

🍚总结

以上是关于死锁和范式的总结,不肝了不肝了,希望有所帮助。

相关文章
|
测试技术
软件测试的艺术:探索式测试的实践与思考
在软件开发的广阔海洋中,测试是确保航船稳健行驶的关键。本文将带你领略探索式测试的魅力,一种结合创造性思维和严格方法论的测试方式。我们将一起揭开探索式测试的神秘面纱,了解其核心概念、实施步骤和带来的效益。通过实际代码示例,你将学会如何将探索式测试融入日常的软件质量保证流程中,提升测试效率与质量。
|
负载均衡 算法 网络协议
slb监听协议UDP
SLB的UDP监听器适用于实时性高、数据完整性要求低的场景,如视频流和在线游戏。它无连接、不可靠,不保证数据顺序和重传,适合延迟敏感应用。SLB进行UDP会话保持依赖应用层协议或数据包标识符,使用定制健康检查检测后端服务器状态,并支持多种负载均衡算法。配置时注意网络环境对UDP的支持,确保流量畅通。
341 4
|
数据库
FastAPI 学习之路(三十四)数据库多表操作
FastAPI 学习之路(三十四)数据库多表操作
FastAPI 学习之路(三十四)数据库多表操作
|
JSON NoSQL 关系型数据库
MongoDB常用命令大全,概述、备份恢复
MongoDB常用命令大全:服务启动停止、查看状态、备份;数据库相关,集合操作,文档操作,其他常用命令;数据备份恢复/导入导出——mongodump、mongorestore;MongoDB与SQL比较
|
前端开发 Java
基于SSM框架的手机商城项目
基于SSM框架的手机商城项目
225 0
|
存储 Java 应用服务中间件
Request&Response(3)
Request&Response
183 0
|
数据采集 运维 DataWorks
DataWorks产品使用合集之DataWorks提供了整库实时同步解决方案如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
152 0
|
SQL Oracle 关系型数据库
关于数据库安装的问题SP2-0667: Message file sp1.msb not found
昨天自己在OEL上准备把10g,11g的环境都准备一下,我规划了一下硬盘空间,然后创建了相应的用户,12c的Oms也在这次的范围之内。 drwx------  4 oms10g  dba     4096 Jan 18 20:56 oms10g...
3471 0
|
XML Java Android开发
HarmonyOS学习路之开发篇—— Java UI框架(基础组件说明【一】)
HarmonyOS的常用组件一般在resources/base/layout下的xml文件中声明,然后在AbilitySlice中通过super.setUIContent(ResourceTable.某layout布局的文件名)来加载布局。在AbilitySlice中通过super.findComponentById(ResourceTable.组件的id)获取组件,获取成功后就可以对该组件进行操作,如添加监听,设置内容等。当然也可以通过代码动态的使用控件。
|
算法
数据结构与算法——算法与算法分析
数据结构与算法——算法与算法分析
数据结构与算法——算法与算法分析

热门文章

最新文章