java多线程系列翻译之java并发/多线程教程

原文地址:http://tutorials.jenkov.com/java-concurrency/index.html

以前计算机都是单核,同时只能执行一个程序。之后出现了多重任务处理,这意味着计算机同时可以处理多个程序(又名任务或流程)。但这不是真正的“同时执行”,只是单个CPU被多个程序共享。操作系统会在运行的程序之间轮流切换,切换前相应的程序会获得少量的执行时间。

随着多任务处理的出现,给软件开发人员也带来了新的挑战。程序不再能保证CUP所有的执行时间可用,也不能确保所有的内存和计算机资源可用。一个合理的程序应该释放它不再使用的所有资源,以便于其他程序能够使用它们。

然后出现了多线程,这意味着同一个程序中可以执行多个线程。线程的执行等价于执行程序的CPU。当多个线程执行同一个程序时,相当于多个CPU执行同一个程序。

多线程可以很好的提升某些程序的性能。然而,多线程比多任务处理具有更大的挑战性。多个线程执行同一个程序时,存在同时读写同一个内存的情况,这将出现单线程程序不曾有的错误。有些错误在单CPU机器上可能出现不了,因为两个线程永远不会同时执行。然而现代计算机配置了多CPUs,这意味着单独的线程可以同时在单独的内核或CPU上执行。

Multithreading on a multi-CPU computer

如果一个线程读取一个内存值,同时另外一个线程在向该内存中写入值,第一个线程最终读取的将是哪一个值?是原始的值还是被第二个线程写入的值还是两者的混合值?没有适当的预防措施,任何结果都有可能出现。这种行为甚至无法预测,结果有可能随时改变。因此,对于开发人员来说如何采取正确的预防措施是很重要的——学习控制线程如何正确访问共享进程,比如内存、文件、数据库等。这是该java并发教程讨论的主题之一。

猜你喜欢

转载自blog.csdn.net/sunjian1122/article/details/81663010