翻译了两篇,这篇就不翻译了,自己写吧。

对于线程来说除了安全性,我们还应该重视它的生存性(我认为翻译成三个字说着比較顺)。 为了保证线程安全,我们往往须要用到同步,可是同步限制了线程的运行,线程必须为了获得共享资源而等待。等待的时间可长可短,这就体现了线程的活跃程度,假设线程仅仅是安全的运行了,而运行的非常慢,那并发也就显得不是非常必要了。所以除了保证线程的安全以外我们还必须保证线程的活跃。

同步带来了堵塞的问题,堵塞就得等待,前面提到等待的时间可长可短,最坏的情况下还可能:

死锁(deadlock)

所谓死锁就是一组线程被互相堵塞,在互相等待对方释放资源,经典的就是哲学家就餐问题,每一个哲学家都吃不到饭。

死锁发生的条件有:

1) 具有多个共享资源(被共享的对象)

2) 同一个线程锁定一个资源后,在没有解锁前想要尝试锁定另外一个资源

3) 获得共享资源的顺序不固定,资源之间没有优先级

避免以上三个条件中的不论什么一个都能够避免死锁。

也有可能发生饥饿(starvation)和活锁(livelock)

饥饿指线程一直在等待自己想要的资源而得不到,被block非常长的时间。造成这样的情况的原因可能是其它线程一直在使用这个资源,永远轮不到这个可怜的线程。狼群就餐有等级制度,如果捕获的食物不够,每次吃饭的时候那个等级最低的狼都吃不到东西,那这个可怜的狼就仅仅有饿死了。(也许实际情况不是这样,取个样例,比較好记)

活锁,这样的情况下没有堵塞,线程都是活跃的,都在运行,可是都在原地踏步,最好的样例就是两个人过过道的样例。A和B分别从过道的两头走过来,A给B让路的时候B也就A让路,如此重复,两方都在一直让路。线程没有人那么聪明,所以他们可能会一直让下去,于是就发生了活锁这样的事情。

liveness 生存性/活性的更多相关文章

  1. Effective Java 第三版——48. 谨慎使用流并行

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  2. k8s-pod的生命周期

    1.pod资源-spec.containers - name:镜像运行起来之后叫容器,该字段为容器名 image:镜像名字 imagePullPolicy:表示从哪拉取镜像, Always:不管本地有 ...

  3. k8s系列---kubectl基础

    kubectl get pods  查看所有pods kubectl  get  services  查看services kubectl replace --filename=myweb-rc.ya ...

  4. 拥抱K8S,Spring Boot 2.3提供K8s活性和就绪性探针

    Spring Boot 2.3将包括对Kubernetes liveness&readiness Probe的本地支持,扩展了2.2的"运行状况组"支持,允许开发人员选择运 ...

  5. 容器探针(liveness and readiness probe)

    一.为什么需要容器探针 如何保持Pod健康   只要将pod调度到某个节点,Kubelet就会运行pod的容器,如果该pod的容器有一个或者所有的都终止运行(容器的主进程崩溃),Kubelet将重启容 ...

  6. Kubernetes Pod中容器的Liveness、Readiness和Startup探针

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 探针的作用 在Kubernetes的容器生命周期管理中,有三种探针,首先要知道,这探针是属于容器的,而不是Pod: 存 ...

  7. java-并发-活性

    浏览以下内容前,请点击并阅读 声明 一个并发程序以适时方式执行的能力叫活性.以下部分介绍最常见的一种活性问题,死锁,并简单介绍其他两种活性问题,饥饿和活锁. 死锁 死锁描述了一种情况:两个或两个以上的 ...

  8. 【翻译十二】java-并发之活性

    A concurrent application's ability to execute in a timely manner is known as its liveness. This sect ...

  9. org.elasticsearch.transport.ReceiveTimeoutTransportException[cluster:monitor/nodes/liveness] request_id [31] timed out after [5000ms]

    ES连接超时,异常信息 2017-09-07 10:42:45.042 [elasticsearch[Bantam][transport_client_worker][T#17]{New I/O wo ...

随机推荐

  1. linux mount 命令详解

    命令格式: mount [-t vfstype] [-o options] device dir 其中: 1.-t vfstype 指定文件系统的类型,通常不必指定.mount 会自动选择正确的类型. ...

  2. Tomcat配置HTTPS方式

    简要记录主要步骤备忘 1.进入到jdk下的bin目录 2.输入如下指令 keytool -v -genkey -alias tomcat -keyalg RSA -keystore d:/tomcat ...

  3. ↗☻【编写可维护的JavaScript #BOOK#】第8章 避免“空比较”

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  4. hdu 2955 Robberies

    Robberies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. [面试题] for() while() 条件判断 赋值问题

    http://group.jobbole.com/7963/#comm-11311 [题目]:下列for循环的循环体执行次数为 for(int i=10, j=1; i=j=0; i++, j--)( ...

  6. lightoj 1017

    思路:动态规划,设dp[i][j]表示在前j个dusts中用了i刷子刷掉dusts的个数:状态转移方程就是: dp[i][j] = max(dp[i][j-1], dp[i-1][j-len[j]] ...

  7. Selenium webdriver 之select 控件封装,解决onchange问题

    使用webdriver的时候,select 控件经常会绑定onchange 事件,在selenium2.09 之前click 方法对onchange 事件有bug,2.09 以后修复了,但是根据经验也 ...

  8. Datatable转成Json方式两则

    1, Asp.net C# 使用Newtonsoft.Json 实现DataTable转Json格式数据 1.这里下载:http://www.newtonsoft.com/products/json/ ...

  9. 网页加载速度优化2--先加载css,然后再加载js文件。

    网页加载时,是按从上到下,从左到右的顺序加载的.所以一定要先加载css文件(不要让用户看到一个杂乱无章的页面),最后再加载js文件,js一般都是处理功能的,所以不需要提前加载.先给用户观感,再给用户上 ...

  10. 在linux上通过JDBC连接ORACLE 时总是出现 java.sql.SQLRecoverableException: IO Error: Connection reset 的问题

    如标题所述,经过和度娘沟通了不知道多少遍最后看一篇文章解决, 我是通过执行jar来操作DB的.所以在命令中加了一个参数( 加粗,红色) eg: $JAVA_EXE -Djava.security.eg ...