1. 竞态

对于同样的输入,程序的输出有时候正确而有时候却是错误的。这种一个计算结果的正确性与时间有关的现象就被称为竞态(RaceCondition)

导致竞态的常见原因是多个线程在没有采取任何措施的情况下并发更新、读取同一个共享变量。

竞态往往伴随着数据的脏读问题,即线程读取到一个过时的数据;丢失更新问题,即一个线程丢失数据所做的更新没有体现在后续其他线程对该数据的读取上。

不同线程各自访问各自的那一部分局部变量(包括形式参数和方法体内定义的变量),所以局部变量不会导致竞态。

线程安全 如果一个类在单线程环境下运行正常,并且在多线程环境下,不做任何改变的情况下也能正常运行,那我们就称其是线程安全的,相应的我们称这个类具有线程安全性。

非线程安全 反之我们则为非线程安全。

2.  线程安全问题

线程安全问题概括来说表现为3个方面: 原子性(atomic),可见性(visibility)和有序性(ordering)。

线程终止与可见性

public class ThreadJoinVisibility {static int data = 0;public static void main(String[] args) {Thread thread = new Thread(){@Overridepublic void run(){data = 1;}};thread.start();try {/***   java语言规范保证一个线程终止后该线程对共享变量的更新对* 于调用该线程的join方法的线程而言是可见的。*/thread.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println(data);}
}

3. 编译器可能改变两个操作的先后顺序;处理器可能不是完全依照程序的目标代码所指定的顺序执行指令;另外,一个处理器上执行的多个操作,从其他处理器的角度来看其顺序可能与目标代码所指定的顺序不一致。这种现象就叫做重排序(Reordering).

4. 指令重排序

从底层的角度来说,禁止重排序是通过调用处理器提供相应的指令(内存屏障 memory barrier)来实现的。 volatile关键字, synchronized关键字都能够实现有序性。

5. 上下文切换(context switch)

在某种程度上,可以被看做多个线程共享同一个处理器的产物,它是多线程编程中的一个重要概念。

6. 一次只能够被一个线程占用的资源被称为排他性(Exclusive)资源. 常见的排他性资源包括处理器,数据库连接,文件等。

7.  同一时间内,处于运行状态(即生命周期状态为RUNNABLE的RUNNING子状态的线程)的线程数量越多,我们就称并发的程度越高,简称高并发

《java多线程编程实战指南 核心篇》读书笔记二相关推荐

  1. 《Docker 技术入门与实践》-读书笔记二

    <Docker 技术入门与实践>-读书笔记一 <Docker 技术入门与实践>-读书笔记二 一.数据管理 用户在使用 Docker 的过程中,往往需要能查看容器内应用产生的数据 ...

  2. python基础学习[python编程从入门到实践读书笔记(连载一)]

    写在前面:本文来自笔者关于<python编程从入门到实践>的读书笔记与动手实践记录. 程序员之禅 文章目录 02变量和简单数据类型 03 列表简介 04 操作列表 05 if语句 06 字 ...

  3. 测试工程师全栈技术进阶与实践读书笔记

    第一章 软件测试基础知识精要(上) 1.1 从"用户登录"测试谈起 1.1.1 功能测试用例 1.1.2 更多的测试用例 1.1.3 功能性需求与非功能性需求 对显式功能性需求的验 ...

  4. python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目

    文章目录 Django项目:学习笔记web网页 项目部署 参考 自己部署的网站,还是小有成就感的,毕竟踩过很多坑,实战技能也有些许进步. 网站链接:http://lishizheng.herokuap ...

  5. python基础学习[python编程从入门到实践读书笔记(连载五)]:数据可视化项目第16章

    文章目录 下载数据 制作全球地震散点图:JSON格式 end 几个实验结果: 每日最高气温: 地震图绘制: 下载数据 CSV文件格式 在文本文件中存储数据,一个简单方式是将数据作为一系列以逗号分隔的值 ...

  6. 【Docker技术入门与实践(第2版)】Docker入门_学习笔记

    第一章 1 Docker入门须知 1.1 Docker基本知识 Docker是基于Go语言实现的开源容器项目,诞生于2013年年初,最初发 起者是dotCloud公司.Docker自开源后受到广泛的关 ...

  7. python编程从入门到实践读书笔记-《Python编程:从入门到实践》项目部分读书笔记(二)...

    鸽了一个暑假没有更新,现在趁着还没开学更一下.咕咕咕 上期作业: 请创建一个Django项目,命名为Blog,建不建立虚拟环境随便你,最后本地跑成了就行. 步骤: ①在需要创建工程的文件夹下打开cmd ...

  8. python基础学习[python编程从入门到实践读书笔记(连载二)]:外星人入侵项目

    第一版游戏demo 添加计分系统:中间是最高得分,右边是本次得分. 显示余下的飞船数 主函数如下,完整程序将上传到笔者的github:https://github.com/shizhengLi/lea ...

  9. 深入浅出Istio:Service mesh快速入门与实践-读书笔记(By GisonWin)

    01 服务网格历史 (以后补充) 02 服务网格的基本特性 连接 微服务错综复杂,要完成其业务目标,连接问题是首要问题.连接存在于所有服务的整个lifcecycle中,用于维持服务的运行. 安全 保障 ...

  10. 深度学习框架Pytorch入门与实践——读书笔记

    2 快速入门 2.1 安装和配置 pip install torch pip install torchvision#IPython魔术命令 import torch as t a=t.Tensor( ...

最新文章

  1. ondblog 修改informix日志模式
  2. 图神经网络GNN预训练技术进展概述
  3. 德国汽车产业研究:立足本土,迈向世界
  4. 【tensorflow】安装cuda10.0 and cudnn 7.5.0 and tensorflow-gpu==1.14.0
  5. 专访.NET平台上类RoR开源项目Castle[转载]
  6. Controller FioriTest.view.LineItem couldn't be instantiated
  7. 【渝粤教育】电大中专建设工程法规 (2)作业 题库
  8. linux开机启动详细流程图
  9. Ubuntu下安装JDK1.8并配置开发环境
  10. c语言随机数 单片机32,自己用C语言写PIC32单片机的serial bootloader
  11. php---兄弟连的php培训视频的总结(1)
  12. java md5加密32位小写_java md5加密 32位 小写
  13. VMware虚拟机安装ubuntu后无法复制文件的解决办法
  14. Vue 自定义移动端的 滑动事件
  15. 如何写出有吸引力的软文?经典软文案例分析
  16. win10下装win7双系统_win10下怎么装win8系统 win10下装win8系统方法【详细教程】
  17. 法国数学到底有多厉害?
  18. 计算机专业背景的大学,不要求专业背景的计算机专业!
  19. web开发—— 前端基础(6) ——语义化标签
  20. Android中HTTPS之一(三)具体操作(代码实现)

热门文章

  1. 1642: [Usaco2007 Nov]Milking Time 挤奶时间(dp)
  2. Procedure execution failed 2013 - Lost connection to MySQL server during query
  3. Test on 11/14/2016
  4. android 原色调渲染
  5. 第十五篇、程序返回前台的时间差(常用于显示广告)
  6. Linux常用监控命令简介 – vmstat,ps,free,uptime 等
  7. JQuery选择器大全
  8. 开源ERP系统 CK-ERP
  9. c++ 字符类型总结区别wchar_t,char,WCHAR(转)
  10. Net平台下的分布式缓存设计