面试官问线程的问题,以前从来没有总结过怎么回答,一下子就说不出来了。回来细细总结一下,下次不能再不知道从哪里说起了

细思之, 首先应该 了解什么是线程、线程是资源分配的基本单位,程序执行流的最小单位。线程可以共用内存资源,多线程能解决cpu空闲的问题。 多线程能够实现并发的执行任务,提高处理能力。多线程就会有共享资源,为了保证资源能够互斥访问,就必须给资源加锁,拥有该资源锁的线程才能访问该资源,每个对象都有自己的锁。

死锁:指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去

怎么避免死锁:

死锁的条件:

死锁的四个必要条件

在计算机专业的本科教材中,通常都会介绍死锁的四个必要条件。这四个条件缺一不可,或者说只要破坏了其中任何一个条件,死锁就不可能发生。我们来复习一下,这四个条件是:
•互斥(Mutual exclusion):存在这样一种资源,它在某个时刻只能被分配给一个执行绪(也称为线程)使用;
•持有(Hold and wait):当请求的资源已被占用从而导致执行绪阻塞时,资源占用者不但无需释放该资源,而且还可以继续请求更多资源;
•不可剥夺(No preemption):执行绪获得到的互斥资源不可被强行剥夺,换句话说,只有资源占用者自己才能释放资源;
•环形等待(Circular wait):若干执行绪以不同的次序获取互斥资源,从而形成环形等待的局面,想象在由多个执行绪组成的环形链中,每个执行绪都在等待下一个执行绪释放它持有的资源。

解除死锁的必要条件

不难看出,在死锁的四个必要条件中,第二、三和四项条件比较容易消除。通过引入事务机制,往往可以消除第二、三两项条件,方法是将所有上锁操作均作为事务对待,一旦开始上锁,即确保全部操作均可回退,同时通过锁管理器检测死锁,并剥夺资源(回退事务)。这种做法有时会造成较大开销,而且也需要对上锁模式进行较多改动。

消除第四项条件是比较容易且代价较低的办法。具体来说这种方法约定:上锁的顺序必须一致。具体来说,我们人为地给锁指定一种类似“水位”的方向性属性。无论已持有任何锁,该执行绪所有的上锁操作,必须按照一致的先后顺序从低到高(或从高到低)进行,且在一个系统中,只允许使用一种先后次序。

转载于:https://www.cnblogs.com/AmilyWilly/p/7120746.html

什么是多线程,锁,死锁,怎么避免死锁(转)相关推荐

  1. java判断线程是否死锁_c++多线程锁 Mutex  自动判断死锁

    c++多线程锁可以使用absl::Mutex  std::mutex这两种,下面是demo代码. 使用absl:Mutex的时候打印: [mutex.cc : 1338] RAW: Cycle: [m ...

  2. 【JUC并发编程06】多线程锁 (公平锁和非公平锁,死锁,可重锁)

    文章目录 6 多线程锁 (公平锁和非公平锁,死锁,可重锁) 6.1 synchronized 锁的八种情况 6.2 对上述例子的总结 6.3 公平锁和非公平锁 6.4 可重入锁 6.5 死锁 6 多线 ...

  3. 【Java 并发编程】多线程、线程同步、死锁、线程间通信(生产者消费者模型)、可重入锁、线程池

    并发编程(Concurrent Programming) 进程(Process).线程(Thread).线程的串行 多线程 多线程的原理 多线程的优缺点 Java并发编程 默认线程 开启新线程 `Ru ...

  4. java 转账 锁_Java多线程 多个人转账发生死锁

    Java多线程 多个人转账发生死锁 Java多线程 多个人转账发生死锁 文章目录多个人转账发生死锁 多个人转账发生死锁 人数多的时候, 依然会发生死锁, 遵循墨菲定律. 虽然人多的时候发生死锁的几率不 ...

  5. Java多线程编程(四)——死锁问题

    死锁 什么是死锁? 什么情况下会产生死锁? 生产者与消费者 什么是生产者与消费者? Object类的等待和唤醒方法 生产者-消费者案例(唤醒机制) 基本写法 代码书写技巧与"套路" ...

  6. java多线程同步与死锁_浅析Java多线程中的同步和死锁

    Value Engineering 1基于Java的多线程 多线程是实现并发机制的一种有效手段,它允许编程语言在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间相互独立,且与进程一样拥有独立 ...

  7. Java多线程学习之路(四)---死锁(DeadLock)

    Java多线程学习之路(四)-死锁(DeadLock) 1.定义 死锁就是多个线程在竞争共享资源的时候,相互阻塞,不能脱身的状态(个人理解).其实死锁一定程度上可以看成一个死循环. 举个现实生活中的例 ...

  8. 什么是线程锁和进程锁?什么是死锁,死锁产生的原因和解决锁的办法

    线程锁:当多个线程几乎同时修改一个共享数据的时候,需要进行同步控制,线程同步能够保证多个线程安全的访问竞争资源(全局内容),最简单的同步机制就是使用互斥锁. 某个线程要更改共享数据时,先将其锁定,此时 ...

  9. linux查看java线程死锁_ccriticalsection 多线程 死锁_c++ 线程死锁_linux 线程 死锁

    qq_407283393122018-12-10 一个很蠢的造成死锁的问题 wanglt3113172018-12-12 什么是死锁,死锁的原因,如何避免 apanying902019-01-09 c ...

  10. python 线程死锁_python线程死锁与递归锁

    死锁现象 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待 ...

最新文章

  1. jcg q8 固件_JCG学院开设了Java设计模式课程!
  2. 【渝粤教育】广东开放大学 Linux操作系统 形成性考核 (55)
  3. python 运维管理架构_企业运维监控平台架构设计与实现(ganglia篇)
  4. [20130706]传说中的中断风暴
  5. 开公司的两个方向,要么把公司开成很赚钱,要么把公司做成很值钱
  6. 在Ant Design Pro(React)中使用ECharts
  7. IOS transform的使用(移动,放大,旋转)
  8. 联合国应考虑建设第二总部
  9. STM STC NXP单片机 按键扫描
  10. Java生成桌面快捷方式(字节流生成)
  11. 大数据技术及大数据架构
  12. 几何光学学习笔记(20)- 5.3视场光阑
  13. 酒店网络营销的5C时代-德比软件 张焕杰
  14. 韵脚与押韵的练习(十三韵)
  15. sql 数据库课程设计作业——基于python--GUI的运动会报名管理系统
  16. 个人随笔-求学求职-工作经历-计划
  17. NoSQL数据库优缺点
  18. Linux uname
  19. 博客13周年:网站暗淡的一年
  20. 嵌入式Qt开发环境搭建

热门文章

  1. java命令行参数是什么_Java实验课:命令行参数是什么?
  2. android ndk怎样加载o文件_Android开发:JNI与NDK全面剖析与实战
  3. python用递归法将一个整数n转化为字符串_Python学习之旅 —— 基础篇(五)字符串格式化、递归、生成器迭代器...
  4. python 自动加载_【python】命令行下自动加载模块和tab补全功能
  5. linux支持ext2格式吗,linux正统标准文件系统ext2详解
  6. 「每天一道面试题」AQS是什么?了解其内部同步队列实现结构吗?
  7. 从云计算到人工智能 都逃不过被炒作的命运
  8. HDU4825/5536 [01 字典树/简单字典树更新]
  9. java 关于时间处理
  10. 远程桌面无法连接方案