作者: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多线程,但有些在多线程中出现的问题会和多任务以及分布式系统中出现的存在类似,因此该系列会将多任务和分布式系统方面作为参考,所以叫法上称为“并发性”,而不是“多线程”。

原创文章,转载请注明: 转载自并发编程网 – ifeve.com

本文链接地址: Java并发性和多线程介绍

转载于:https://www.cnblogs.com/whtydn/p/5134252.html

Java 并发和多线程(一) Java并发性和多线程介绍[转]相关推荐

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

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

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

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

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

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

  4. Java 并发/多线程教程(四)-并发模型

    本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平有限,不对之处还望矫正! 并发系统可以有多 ...

  5. 多线程面试题_100多线程和Java并发面试问答–最终清单(PDF下载)

    多线程面试题 在这篇文章中,我们将提供有关多线程和Java并发面试问答的综合文章. 编者注:并发始终是开发人员的挑战,编写并发程序可能非常困难. 引入并发时,有很多事情可能会崩溃,并且系统的复杂性会大 ...

  6. c++ 线程什么时候run_多线程并发支撑基础之JAVA内存模型

    Java内存模型可以说是Java并发的底层支持,了解Java内存模型才能正在了解Java并发. 内存模型 在内存中设置一个变量"value = 1:"那么其他线程能在什么时候读取到 ...

  7. JAVA多线程下高并发的处理经验

    java中的线程:java中,每个线程都有一个调用栈存放在线程栈之中,一个java应用总是从main()函数开始运行,被称为主线程.一旦创建一个新的线程,就会产生一个线程栈.线程总体分为:用户线程和守 ...

  8. 编写高质量代码:改善Java程序的151个建议(第9章:多线程和并发___建议125~131)

    建议125:优先选择线程池 建议126:适时选择不同的线程池来实现 建议127:lock与synchronized是不一样的 建议128:预防线程死锁 建议129:适当设置阻塞队列的长度 建议130: ...

  9. java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part9~整起(单双列集合们、ArrayList 的扩容机制、HashMap、ConcurrentHashMap )

    再进入正文之前,先看看集合相关操作的时间复杂度: 本故事源自于~ 开唠: PART0: 为什么突然蹦出集合这个玩意,就是因为咱们基础那里学的"数组"不够用~: 数组一般用来保存一组 ...

  10. Java并发指南17:Java常见多线程面试题及答案

    Java多线程面试题及答案(2020版) 前言 个人珍藏的80道Java多线程/并发经典面试题,因为篇幅太长,现在先给出1-10的答案解析哈,后面一起完善~ 1. synchronized的实现原理以 ...

最新文章

  1. 超越PVT、Swin,南大开源高效Transformer:ResT​
  2. 制作Windows Server 2008安装启动U盘
  3. 扎心了!腾讯扩招至5000人,99%应届生:与我无瓜
  4. 单一课和综合课的划分依据_武夷岩茶产地如何划分?
  5. windows CMD.exe下写路径太长的解决方案
  6. (软件工程复习核心重点)第八章面向对象方法学习题
  7. 管理系统页面脚手架(一)
  8. 计算机如何安装pdf,pdf虚拟打印机是什么?怎么安装到电脑里
  9. 软件测试mysql面试题及答案_软件测试技术之面试必问的25道数据库测试题
  10. 法兰克焊接机器人编程入门_焊接机器人编程入门基本常识
  11. html5 css 字体加粗,HTML和CSS实现字体加粗的三种方法
  12. TalkingData :如何做到30分钟内完成对数十亿受众数据的分析 | 会员专栏
  13. 时序分析模型——MMMC
  14. Android运行报错:Error: Static interface methods are only supported starting with Android N
  15. 计算机图形学流体仿真mac网格,用于图形学的流体仿真20教程.docx
  16. 浏览器输入url后经历的过程(详细)
  17. 世界上的第一台计算机什么样,世界上第一台计算机是什么样的
  18. python人脸识别门禁系统_智能人脸识别门禁系统
  19. 24 点游戏(Leetcode-679)-回溯法
  20. 我的服务器新手箱子无限,家庭影音之路 篇一:#原创新人#服务器安装Rutorrent(PT盒子)Seedbox教程...

热门文章

  1. 求出0~999之间的所有“水仙花数”并输出。“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身
  2. Log4j2 Zero Day 漏洞 Apache Flink 应对指南
  3. Android下磁盘分区表损坏,电脑硬盘分区表损坏怎么修复?电脑硬盘分区表损坏的修复方法...
  4. mysqloffset什么意思_mysql查询时offset过大影响性能的原因和优化详解
  5. java展开式的菜单_ListView点击Item展开菜单实现代码详解
  6. 一个网站哪些页面需要用到redis_网页和网站有什么区别?做一个网站难不难?都需要哪些技能?...
  7. python-学生管理系统--5 统计学生总人数功能
  8. mysql 复制协议_一种基于ISER协议的MySQL数据库复制方法与流程
  9. python程序流程控制结构_Python程序控制结构 | 分支结构
  10. Tensorflow笔记:MNIST数据集输出手写数字识别准确率