一、概念

饥饿:如果一个线程因为 CPU 时间全部被其他线程抢走而得不到 CPU 运行时间,这种状态被称之为“饥饿”;

二、饥饿原因

  1. 高优先级线程吞噬所有的低优先级线程的 CPU 时间。
  2. 线程被永久堵塞在一个等待进入同步块的状态,因为其他线程总是能在它之前持续地对该同步块进行访问。
  3. 线程在等待一个本身(在其上调用 wait())也处于永久等待完成的对象,因为其他线程总是被持续地获得唤醒。

三、公平性

1、用锁代替同步代码块

public class Synchronizer{Lock lock = new Lock();public void doSynchronized() throws InterruptedException{this.lock.lock();//critical section, do a lot of work which takes a long timethis.lock.unlock();}
}

   2、公平锁

四、java中的锁

1、锁的可重入性如果一个线程已经拥有了一个管程对象上的锁,那么它就有权访问被这个管程对象同步的所有代码块。这就是可重入。

2、锁的公平性在finally中调用unlock()

3、读写锁(java.util.concurrent.locks.ReadWriteLock)

假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读或写。

转载于:https://www.cnblogs.com/lwcoding/p/6678292.html

java多线程——饥饿和公平相关推荐

  1. 18、Java并发性和多线程-饥饿与公平

    以下内容转自http://ifeve.com/starvation-and-fairness/: 如果一个线程因为CPU时间全部被其他线程抢走而得不到CPU运行时间,这种状态被称之为"饥饿& ...

  2. java线程饥饿原理_java 多线程饥饿现象的问题解决方法

    java 多线程饥饿现象的问题解决方法 当有线程正在读的时候,不允许写 线程写,但是允许其他的读线程进行读.有写线程正在写的时候,其他的线程不应该读写.为了防止写线程出现饥饿现象,当线程正在读,如果写 ...

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

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

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

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

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

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

  6. Java多线程学习十五:公平锁和非公平锁,为什么要“非公平”?

    什么是公平和非公平 公平锁 指的是按照线程请求的顺序,来分配锁: 非公平锁 指的是不完全按照请求的顺序,在一定情况下,可以允许插队.但需要注意这里的非公平并不是指完全的随机,不是说线程可以任意插队,而 ...

  7. Java多线程——线程池的饥饿现象

    概述 定长线程池的使用过程中会存在饥饿现象,也就是当多线程情况下,当池中所有线程都被占用后,被占用的线程又需要空闲线程去进行下一步的操作,此时又获取不到池中空闲的线程,此时就出现了饥饿现象. 示例 p ...

  8. ***JAVA多线程和并发基础面试问答

    多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题.(校对注:非常赞同这个观 ...

  9. Java多线程开发系列之四:玩转多线程(线程的控制2)

    在上节的线程控制(详情点击这里)中,我们讲解了线程的等待join().守护线程.本节我们将会把剩下的线程控制内容一并讲完,主要内容有线程的睡眠.让步.优先级.挂起和恢复.停止等. 废话不多说,我们直接 ...

最新文章

  1. 谈谈几个 Spring Cloud 常见面试题及答案
  2. 多目标线性规划求解方法及matlab实现
  3. 解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variabl
  4. 65个技巧性回答,终身受用
  5. .NET中如何通过文本框中按回车键进行的提交数据
  6. 你要知道的MacOS哪些优缺点
  7. python 数据结构转换层_python – 具有Maxpooling1D和channel_first的Keras模型
  8. 【转载】Eclipse快捷键 10个最有用的快捷键
  9. 听说你还不会归并排序?
  10. ubuntu 12.04 server + OPENACS(TR069)安装配置日记
  11. 在U盘上安装ChromiumOS
  12. 备考通信复试过程中的一些知识点总结梳理——信息论基础知识
  13. c#轻量级高并发物联网服务器接收程序源码
  14. Linux fstab文件详解
  15. 像素值/DN值/数字量化值
  16. c++minmax函数_std :: minmax()函数以及C ++ STL中的示例
  17. 微信小程序云开发数据库操作
  18. (转)超全整理!Linux性能分析工具汇总合集
  19. 记一次阿里云k8s部署-测试存储
  20. 2015 mbpr13 升级固态硬盘

热门文章

  1. 开源 java CMS - FreeCMS2.8 自定义标签 siteOne
  2. hadoop生态搭建(3节点)-05.mysql配置_单节点
  3. 60 Permutation Sequence
  4. 课后作业-阅读任务-阅读提问-3
  5. 银行的清算、清分、结算、对账
  6. 面向对象的三个基本特征 和 五种设计原则
  7. PowerDesigner打开设计文件后提示failed to read the fileXXX的解决办法
  8. Ncut matlab 代码bug 修复
  9. 测试php连接mysql
  10. CentOS6.4安装nginx1.4