1.Java并发/多线程介绍

想当年一台计算机只有一个CPU,并且一次只能处理一个程序的能力。后来多任务处理出现了,这就意味着计算机可以同时处理多个程序了。虽然它不是真正的“同时”。单独的CPU在程序之间被共享。操作系统将会在运行中的程序进行切换,在切换之前执行一会他们中的一个。

伴随着多任务处理的到来,对于软件开发者来说是一个新的挑战。程序不能去假设所有的CPU一直都是可用的了,或者所有的内存以及其他的计算机资源。一个好的程序应该释放所有它不再使用的资源,以至于其他的程序可以使用它们。

后来多线程出现了,这就意味着你在相同的程序中可以执行多个线程。一个线程可以认为是一个CPU在执行一个程序。当你有多个线程执行在相同的程序中时,就像是有多个CPU执行在相同的程序中。

多线程可以是一个很好的方式去增加一些类型程序的性能。然而,多线程相对于多任务来说,甚至是一个更大的挑战。这个线程正在执行在相同的程序中,一次同时读和写相同的内存。这个就可能导致在单线程中没有见过的错误。这些错误中的一些在单CPU机器中可能没有见过,因为两个线程从来不会同时执行。现代的计算机,都是多核CPU,并且甚至也会有多种的CPU。这就意味着分开的线程可以同时被分开的核或者CPU去执行。


如果一个线程读一个内存单元,而另外一个线程写他的时候,第一个线程将会以读到什么值结束?这个老的值?还是被第二个线程写的值?或者是这两个之间的一个混合值?或者如果两个线程同时写相同的内存单元,当他们完成的时候什么值会留下呢?通过第一个线程写的值?通过第二个线程写的值?还是一个混合的值呢?

没有合适的防范,这些输出中的任何一个都有可能。这个运行状况甚至是不可预测的。这个输出结果可能会随时改变。因此作为一个开发者知道如何使用正确的防范是重要的----这个意味着需要学会控制线程如何访问共享资源,像内存,文件,数据库等等。那个就是这个java并发教程主题中的一个。

Java中的多线程和并发

Java对于开发者来说是第一个使得多线程简单易用的语言。Java从最开始就有多线程功能。因此,Java开发者会经常会面对上面描述的问题。这个就是我为什么写关于Java并发的系列文章。正如对我自己来说,任何Java开发的伙伴都可能会从它中得到益处。

这一系列将会主要是关于Java多线程的,但是发生在多线程中的一些问题,跟发生在多任务处理中和分布式系统中的一些问题是相似的。在这一系列中也可能会提及到多任务处理和分布式系统。因此这个词“并发”不只是多线程。

在2015年的Java并发以及未来

自从第一本Java并发书籍被写,在Java并发框架和设计的世界里已经发生了很多的事情了,并且甚至自从Java5并发工具被发布了之后。

新的,异步的“无共享”的平台和API,像Vert.x和Play / Akka以及Qbit已经应运而生了。这些平台相对于标准的Java线程,共享内存和锁的并发模型,使用了不同的并发模型。新的非堵塞并发算法已经发布了,并且新的非堵塞并发工具,像LMAX Disrupter已经添加到我们的工具包里面了。

伴随着这些新的进展,也是我更新Java并发教程的时间。因此,这个教程再一次处在修改中。只要有时间写他们,新的教程将会被发布。

翻译地址:http://tutorials.jenkov.com/java-concurrency/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值