java 并发基础

来源:互联网 发布:文本相似度计算算法 编辑:程序博客网 时间:2024/05/16 15:57

最近一直在看《java并发编程的艺术》这本书,书是好书,就是看起来太费劲。这就是所谓的技术门槛吧。

也不知道理解的对不对,我就随便输出点东西吧,因为我发现不输出,不把自己掌握的东西做个定性,就始终不是自己的。

先说为啥要有并发吧,还不是因为出现了多线程技术,搞什么多线程充分利用cpu,说白了就是压榨机器性能。如果同时执行的线程大家各干各的,互不干涉也就没什么事了,偏偏有些时候是多个线程执行同一个任务,或者执行不同的任务,要竞争同一个资源;结果就导致多个线程执行出来的结果与我们的预期不一致。这肯定是不行的。为什么会出现这种情况呢?有两个原因:一是CPU以及内存存在缓存,各个线程处理临界资源时,实际是先把临界资源COPY到自己的工作区,处理完后在写回内存,在这个过程中别的线程也做了操作,不一致就出现了。二是java虚拟机在执行java代码时,会根据硬件环境对字节码进行优化,在这个过程中,一些指令会进行重排序,(重排序的目的还是为了充分利用CPU的时钟周期)单线程情况下,不会影响执行结果,多线程情况下,如果不做特殊处理,就会出现跟预期不符的结果。

那么所谓的java并发编程要做什么呢?通过上面的介绍,我们可以下结论了:java并发编程就是在我们充分了解了机器的特性之后,通过编程手段,一方面充分利用java的并发特性写出高性能的代码,另一方面还要使用java提供给我们的各种语言特性,来规避并发过程中的问题,让程序并发的结果符合我们的预期。

再进一步说:如何让并发结果符合我们的预期,其实就是对多线程交叉地带进行管制,让大家有序的访问临界资源。

java并发的基础是基于两点的:1)是大家比较熟悉的synchronized;就是同步锁。一般上认为synchronized是一把重量级锁,虽然实现了并发控制,但是控制的太死,就好比高速下口的人工收费岗,车子高速跑过来不得不等上几十秒,势必造成拥堵;2)volatile变量,这个单词意思为不稳定的。在硬件上来讲就是CPU对变量所做的修改操作会马上回写到主内存中,同时使其他CPU持有的副本失效。为什么是CPU呢,因为通常所说的缓存其实就是CPU缓存,主内存只有一个大家一样的。


未完待续。

原创粉丝点击