作者:Jakob Jenkov 译者:Simon-SZ  校对:方腾飞

http://tutorials.jenkov.com/java-concurrency/index.html

在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。

随着多任务对软件开发者带来的新挑战,程序不在能假设独占所有的CPU时间、所有的内存和其他计算机资源。一个好的程序榜样是在其不再使用这些资源时对其进行释放,以使得其他程序能有机会使用这些资源。

再后来发展到多线程技术,使得在一个程序内部能拥有多个线程并行执行。一个线程的执行可以被认为是一个CPU在执行该程序。当一个程序运行在多线程下,就好像有多个CPU在同时执行该程序。

多线程比多任务更加有挑战。多线程是在同一个程序内部并行执行,因此会对相同的内存空间进行并发读写操作。这可能是在单线程程序中从来不会遇到的问题。其中的一些错误也未必会在单CPU机器上出现,因为两个线程从来不会得到真正的并行执行。然而,更现代的计算机伴随着多核CPU的出现,也就意味着不同的线程能被不同的CPU核得到真正意义的并行执行。

如果一个线程在读一个内存时,另一个线程正向该内存进行写操作,那进行读操作的那个线程将获得什么结果呢?是写操作之前旧的值?还是写操作成功之后的新值?或是一半新一半旧的值?或者,如果是两个线程同时写同一个内存,在操作完成后将会是什么结果呢?是第一个线程写入的值?还是第二个线程写入的值?还是两个线程写入的一个混合值?因此如没有合适的预防措施,任何结果都是可能的。而且这种行为的发生甚至不能预测,所以结果也是不确定性的。

Java的多线程和并发性

Java是最先支持多线程的开发的语言之一,Java从一开始就支持了多线程能力,因此Java开发者能常遇到上面描述的问题场景。这也是我想为Java并发技术而写这篇系列的原因。作为对自己的笔记,和对其他Java开发的追随者都可获益的。

该系列主要关注Java多线程,但有些在多线程中出现的问题会和多任务以及分布式系统中出现的存在类似,因此该系列会将多任务和分布式系统方面作为参考,所以叫法上称为“并发性”,而不是“多线程”。

Java并发性和多线程介绍相关推荐

  1. Java并发性和多线程介绍、优缺点

    在过去 单核CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并 不是真正意义上的"同一时间点",而是多个任务 ...

  2. 《Java并发性和多线程介绍》-Java TheadLocal

    原文链接 作者:Jakob Jenkov   查看全部文章 Java中的ThreadLocal类可以让你创建的变量只被同一个线程进行读和写操作.因此,尽管有两个线程同时执行一段相同的代码,而且这段代码 ...

  3. Java并发性和多线程介绍目录

    http://ifeve.com/java-concurrency-thread-directory/ 转载于:https://www.cnblogs.com/hanfeihanfei/p/68403 ...

  4. 并发基础篇(一): Java 并发性和多线程

    说在前面 介绍文章之前,先给出一个多线程的思维导图, 后续的文章就根据思维导图来一步一步的分析java多线程的知识. 一.介绍 在过去单 CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多 ...

  5. 5、Java并发性和多线程-相同线程

    以下内容转自http://tutorials.jenkov.com/java-concurrency/same-threading.html(使用谷歌翻译): 相同线程(同一线程)是一种并发模型,其中 ...

  6. 17、Java并发性和多线程-避免死锁

    以下内容转自http://ifeve.com/deadlock-prevention/: 在有些情况下死锁是可以避免的.本文将展示三种用于避免死锁的技术: 加锁顺序 当多个线程需要相同的一些锁,但是按 ...

  7. 【转】JAVA 并发性和多线程 -- 读感 (二 线程间通讯,共享内存的机制)

    原文地址:https://www.cnblogs.com/edenpans/p/6020113.html 参考文章:http://ifeve.com/java-concurrency-thread-d ...

  8. 21、Java并发性和多线程-Java中的锁

    以下内容转自http://ifeve.com/locks/: 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂.因为锁(以及其它更高级的 ...

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

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

最新文章

  1. 某程序员吐槽:潮汕女朋友狮子大开口要18万8彩礼,而且只能男友父母出,不能男友出!...
  2. CentOS 7核心安装及基本配置
  3. 【SpringMVC入门】SpringMVC环境搭建、接收参数的几种方式、视图解析器、@ResponseBody
  4. 简述python常用的函数模块_Python中常用的Python time模块常用函数
  5. Hello,移动WEB—px,dp,dpr像素基础
  6. 69期-Java SE-004_循环、数组-001-002
  7. hyperledger fabric v2.4 默认区块大小 配置文件位置
  8. python unpack_Python使用struct处理二进制(pack和unpack用法)
  9. 2021-2027全球与中国全自动探针台市场现状及未来发展趋势
  10. 蓝牙技术|伦茨科技带你了解蓝牙音频
  11. JavaScript设计模式之享元模式
  12. std::setw的坑
  13. 解决一例Fedora 31安装NVIDIA官方驱动程序无法使用DKMS注册的问题
  14. 迅捷PDF转换器怎样转换文件格式
  15. Vue项目引入移动端组件库--Mand Mobile
  16. 【素数表】前20000个素数
  17. CSS3配合JavaScript图片爆炸效果
  18. 让你在macOS上快速查看txt文本文件
  19. qt模拟键盘的三种实现方式(思路+demo)
  20. 用户价值VS商业价值

热门文章

  1. mysql 动态创建事件_mysql 通过事件定时为数据库创建动态表名
  2. python bytes是什么类型,python中的字节串类型(bytes)
  3. linux 安装rpm qt can't creat,CentOS 6.2部署Qt开发环境
  4. nodejs 前端 返回数组给_互联网寒冬,一年经验字节跳动、虾皮、快手、拼多多前端面试总结...
  5. php 什么是对象,什么是PHP类和类的对象(PHP的类简介)
  6. mysql中主键的用法_MySQL中的主键以及设置其自增的用法教程
  7. SpringBoot 工程目录 整合mybatis-neo4j(注解类型)-增删改查
  8. Flink watermark
  9. Bokeh 布局图像和工具
  10. 计算机组成中CM,基于TDN-CM++计算机组成原理课程设计.doc