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

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

🍁 作者:知识浅谈,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范式:每个属性都不部分依赖于候选键也不传递依赖于候选键。

🍚总结

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

相关文章
|
6月前
|
程序员 Python
类的设计奥秘:从代码到架构的科普全解
类的设计奥秘:从代码到架构的科普全解
95 2
|
安全 Java 数据处理
Python多线程编程:概念、技巧及最佳实践
Python多线程编程:概念、技巧及最佳实践
|
设计模式 缓存 负载均衡
你kin你擦!阿里终于肯把内部高并发编程高阶笔记开源出来了
“高并发”三字是近几年开发圈子里热议的一个话题,可能程序员之间闲下来就会讨论所谓的“高并发经验”。值得注意的是即使你和高并发天天打交道,也不一定能获得高并发的经验,高并发只是一个结果,并不是过程。想要玩转高并发,基础最重要,大并发面前,靠得住的只有人,是人来根据具体的应用场景去解决具体的问题。
你kin你擦!阿里终于肯把内部高并发编程高阶笔记开源出来了
|
JavaScript 前端开发 C语言
聊一聊编程中的函数
聊一聊编程中的函数
75 0
|
算法 数据库 C语言
聊一聊编程
聊一聊编程
95 0
|
算法 安全 调度
死锁(知识体系架构和详细解释)
死锁(知识体系架构和详细解释)
170 0
死锁(知识体系架构和详细解释)
|
监控 数据可视化 测试技术
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
273 0
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
|
设计模式 算法 前端开发
我明白了,谈一谈设计原则
死记是没有用的,正如教条主义式的生搬硬套没有多少作用,理解了才能举一反三、灵活运用。 我们可以再弄清楚十大原则:单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则、依赖倒置原则、 迪米法特原则、组合聚合复用原则、不重复你自己、尽量保持简单、不过度设计。
113 0
我明白了,谈一谈设计原则
|
数据采集 算法 Java
库调多了,都忘了最基础的概念-《线程池篇》
库调多了,都忘了最基础的概念-《线程池篇》
129 0
库调多了,都忘了最基础的概念-《线程池篇》
|
算法 安全 架构师
软件编程概念与入门
软件编程概念与入门 1.概要 2 项目开发流程 3.编程提升