Java并发/多线程教程

过去计算机有一个单CPU,只能一次执行一个程序。后来计算机可以处理多任务,这意味着计算机可以同时执行多个程序(AKA任务或进程)。但是这不是真的“同时”。单个CPU在程序之间共享。操作系统将在运行的程序之间切换,在切换之前执行每个程序一段时间。
随着多任务处理,软件开发人员面临新的挑战。程序不能再假定所有的CPU时间可用,也不能全部内存或任何其他计算机资源。 “好公民”计划应该释放所有不再使用的资源,其他程序才可以使用它们。
后来有了多线程,这意味着你可以在同一个程序中有多个执行线程。执行线程可以被认为是执行该程序的CPU。当您有多个线程执行相同的程序时,就像在同一程序中执行多个CPU。
多线程可以是提高某些类型程序性能的好方法。然而,多线程比多任务更具挑战性。因为线程在相同的程序中执行,因此读取和写入都在同一个存储器。这可能导致出现在单线程程序中看不到错误。在单CPU机器上可能看不到这些错误,因为两个线程从未真正执行“同时”。现代电脑虽然配有多核CPU,甚至还有多个CPU。这意味着单独的线程可以由单独的内核或CPU同时执行。
这里写图片描述
如果一个线程在另一个线程写入时读取内存位置,那么第一个线程将会读取什么值?旧值?第二个线程写的值?还是两者之间的混合?或者,如果两个线程同时写入同一个内存位置,完成后会留下什么值?第一个线程写的值?第二个线程写的值?还是混合两个值?
没有适当的预防措施,任何这些结果都是可能的,甚至不可预测。结果可能会不时变化。因此,开发人员知道如何采取正确的预防措施是非常重要的 - 意味着学习控制线程如何访问内存,文件,数据库等共享资源。这是Java并发教程的主题之一。
Java中的多线程和并发
java是使开发人员轻松获得多线程的第一种语言之一。 Java从一开始就具有多线程功能。因此,Java开发人员经常面临上述问题。这就是我在Java并发中写开发路径的原因。作为对我自己的注释,以及可能从中受益的任何Java开发人员。
该路径将主要关注Java中的多线程,但是多线程中出现的一些问题与多任务和分布式系统中出现的问题类似。因此,对于多任务和分布式系统的引用也可能发生在此跟踪中。因此,“并发”一词,而不是“多线程”。
Java并发在2015年和转发
自从第一个Java并发书被编写以来,甚至自从Java 5并发实用程序被发布以来,并行架构和设计的世界已经发生了很多。
新的异步“无共享”平台和像Vert.x和Play / Akka和Qbit这样的API已经出现。这些平台使用与线程,共享内存和锁定的标准Java / JEE并发模型不同的并发模型。新的非阻塞并发算法已经发布了,并且已经将新的非阻塞工具(如LMax Disrupter)添加到我们的工具包中。 Java 7中的Fork和Join框架引入了新的功能性编程并行性,Java 8中的集合流API。
随着所有这些新的发展,这是关于我更新这个Java并发教程的时间。因此,本教程再次正在进行中。每当有时间写入时,新的教程将被发布。

猜你喜欢

转载自blog.csdn.net/lwglwg32719/article/details/77099166
今日推荐