Skip to content

Latest commit

 

History

History
22 lines (13 loc) · 2.76 KB

Java并发.md

File metadata and controls

22 lines (13 loc) · 2.76 KB

####Java并发 让我们回到过去,计算机只有一个CPU,某一刻只能运行一个程序。随后出现的多任务一位计算机同时可以运行多个程序,尽管并不是真正的某一个时间点有多个程序在运行一个CPU在多个程序之间共享。操作系统进行CPU的上下文切换,让每个程序获得CPU的使用权利,让后运行。

随着多任务的到来,给开发者们提出了新的挑战。程序不能再假定拥有全部的CPU时间,全部的内存或者其他的计算机资源。一个良好的程序应该释放全部的资源当他不再需要的时候,以便让其他程序使用。

随后又出现了多线程,意味着我们可以在同一个程序中执行多个线程。一个线程执行可以看做一个CPU在执行这个程序。当一个程序有多个线程的时候,可以被看做多个CPU在执行这个程序。

多线程是一种提升同种类型程序的性能的一种方式。然而,多线程比多任务更有挑战性。一个线程在同一个程序内部运行,因此,会读写同一片内存区域。这会产生在单线程程序中不会出现的错误。其中一些错误可能会在单个CPU的机器中发生,因为两个线程从未同时执行过。现代计算机,出现了多核CPU甚至多个CPU,这就意味着我们可以通过多核或者多个CPU同时分开执行多个线程。

enter image description here

如果一个线程在读取一个内存地址的同时另一个线程在向这块内存写入数据,第一个线程将会读取哪一个值,旧值?第一个线程写入的值?或者两个值中的最大会?又或者,两个线程同时向同一块内存写入数据,两个线程都执行完毕后,这块内存区域被写入的到底是那个值?第一个线程写入的值?第二个线程写入的值?还是两个值中的最大值。

上述的这行行为都是不可预料的。最后的结果可能时刻在变化。

#####Java中的多线程和并发 Java是可以让开发者很容易编写出多线程程序的语言之一。Java在一开始就拥有多线程的能力。因此,Java开发者常常面临上面提到的问题。

#####Java 并发 in 2015 和 展望 自从第一本关于Java并发的书籍被编写以来,甚至自从Java5并发工具包发布以来,并发架构和设计的世界都发生着很大的变化。

像Vert.x、Play/Akkah和Qbit 这些异步 “shared-nothing" 平台和API已经出现,这些平台使用了不同于Java/Java EE 平台中标准的关于线程,共享内存和锁的并发模型。新的非阻塞并发算法已经发布,新的非阻塞工具像LMax Disrupter已经被加入到我们的工具箱中。