一:Java 并发和多线程的介绍

来源:互联网 发布:java 小红本 编辑:程序博客网 时间:2024/06/05 22:35

Java 并发和多线程的介绍

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

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

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

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

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

0 0
原创粉丝点击