死锁、活锁、饥饿是关于多线程是否活跃、出现的运行阻塞障碍问题,如果线程出现了这三种情况,即线程不再活跃,不能再正常地执行下去

死锁

死锁是多线程中最差的一种情况,多个线程相互占用对方的资源锁,而又相互等对方释放锁,此时若无外力干预,这些线程则一直处理阻塞的假死状态,形成死锁。上篇博客已详细说明:Java多线程死锁

活锁

活锁应该很少有人听说或理解它的概念,而在多线程中确实存在。活锁恰恰与死锁相反,死锁是大家都拿不到资源都占用着对方的资源,而活锁是拿到资源却又相互释放不执行。当多线程中出现了相互谦让,都主动将资源释放给别的线程使用,此时这个资源在多个线程之间跳动而又得不到执行,这就是活锁

饥饿

我们知道多线程执行中有线程优先级这个东西,优先级高的线程能够插队并优先执行,这样如果优先级高的线程一直抢占优先级低线程的资源,导致低优先级线程无法得到执行,这就是饥饿。当然还有一种饥饿的情况,一个线程一直占着一个资源不放而导致其他线程得不到执行,与死锁不同的是饥饿在以后一段时间内还是能够得到执行的,如那个占用资源的线程结束了并释放了资源。

无锁

无锁就是没有对资源进行锁定,所有的线程都能访问并修改同一个资源,但同时只有一个线程能修改成功。无锁典型的特点就是一个修改操作在一个循环内进行,线程会不断的尝试修改共享资源,如果没有冲突就修改成功并退出,否则就会继续下一次循环尝试。所以,如果有多个线程修改同一个值必定会有一个线程能修改成功,而其他修改失败的线程会不断重试直到修改成功。可以看出,无锁是一种非常良好的设计,它不会出现线程出现的跳跃性问题,锁使用不当肯定会出现系统性能问题,虽然无锁无法全面代替有锁,但无锁在某些场合下是非常高效的。

Java多线程中的锁相关推荐

  1. java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?

    转载自 java多线程中的死锁.活锁.饥饿.无锁都是什么鬼? 死锁.活锁.饥饿是关于多线程是否活跃出现的运行阻塞障碍问题,如果线程出现了这三种情况,即线程不再活跃,不能再正常地执行下去了. 死锁 死锁 ...

  2. 多线程编程进阶——Java类库中的锁

    在Java多线程中,可以使用synchronized关键字来实现线程之间同步互斥,在JDK1.5以后,Java类库中新增了Lock接口用来实现类似的锁功能.下面会逐一介绍关于Java类库中所提供的锁功 ...

  3. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  4. Java多线程系列--“JUC锁”05之 非公平锁

    转载自:http://www.cnblogs.com/skywang12345/p/3496651.html点击打开链接 概要 前面两章分析了"公平锁的获取和释放机制",这一章开始 ...

  5. Java多线程系列---“JUC锁”01之 框架

    本章,我们介绍锁的架构:后面的章节将会对它们逐个进行分析介绍.目录如下: 01. Java多线程系列--"JUC锁"01之 框架 02. Java多线程系列--"JUC锁 ...

  6. Java多线程系列--“JUC锁”03之 公平锁(一)

    概要 本章对"公平锁"的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括: 基本概念 ReentrantLock数据结构 参考代码 获取公平锁(基于JDK1.7.0 ...

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

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

  8. Java多线程(四)线程锁

    6.锁 由于多个线程是共同占有所属进程的资源和地址空间的,那么就会存在一个问题: 如果多个线程要同时访问某个资源,怎么处理? 在Java并发编程中,经常遇到多个线程访问同一个 共享资源 ,这时候作为开 ...

  9. Java 并发编程解析 | 如何正确理解Java领域中的锁机制,我们一般需要掌握哪些理论知识?

    苍穹之边,浩瀚之挚,眰恦之美: 悟心悟性,善始善终,惟善惟道! -- 朝槿<朝槿兮年说> 写在开头 提起Java领域中的锁,是否有种"道不尽红尘奢恋,诉不完人间恩怨"的 ...

最新文章

  1. 使用模板将Web服务的结果转换为标记语言
  2. 首次安装mysql57需要注意的问题
  3. 【Spring】- Bean生命周期
  4. 机器学习-有监督-SVM
  5. 函数求值需要运行所有线程_精读《深度学习 - 函数式之美》
  6. Linux打开bashrc权限不够,bash-4.2$ bash: /home/test/.bashrc: 权限不够
  7. STL常用函数总结-vector
  8. 何不给你单调的鼠标指针换一个好看的样式?(Windows系统下)
  9. html+css+js 实现鼠标拖尾效果(源码)
  10. 深度学习入门(九)——深度学习框架概览
  11. MATLAB零基础入门教程视频课程
  12. web前端开发面试题(五)
  13. matlab实现macd策略,经典MACD交易策略
  14. 博弈论(1)—— 零和与非零和
  15. 因果分析系列5--因果分析中的偏差
  16. 如何解决C盘实际空闲空间远大于可压缩卷空间
  17. IDEA-Warring:Add Author to custom tags
  18. 企业上云是工业互联网的前提,中国企业上云潜力巨大
  19. [体感游戏]关于体感游戏的一些思考(六)--- 飞行
  20. 人工智能:通俗易懂理解深度学习与神经网络

热门文章

  1. material theme 自定义_Angular Material 主题系统(二)-- 自定义主题
  2. 弱网测试环境搭建:针对视频直播等实时音视频应用
  3. 用户行为和属性用于推荐系统问题(MBGCN,AGCN,CML)
  4. android美团底部栏实现,仿美团APP的底部滑动菜单实现
  5. 试题 算法提高 游览计划
  6. Exceptional C++ 读书笔记
  7. 云转码开源源码(非授权版)
  8. GLUE基准数据下载
  9. 《薄冰实用英语语法详解》独家连载之十四:介词
  10. 基于JAVA移动电商网站计算机毕业设计源码+系统+数据库+lw文档+部署