一,并发理论的简介
?1.解释java线程模型
?? java线程模型建立在两个基本的概念之上:
线程的调度可能会导致方法“半途而费”,并出现状态不一致的对象。某一线程对数据进行修时,会让其他线程无法见到本来应该可见的修改。为了缓解这些风险,Java提出了最后一点要求:
?2.设计理念
? Doug Lea在创造他的里程碑式的作品java.util.concurrent时列出了下面这些最重要的设计原则:
3.系统开销之源
二,块结构并发(JAVA 5之前)
??? 1.同步与锁
????? sychronized的知识就不多说了,不懂的可以网上查查。
?? Java中的同步和锁相关的一些基本事实:
2.线程的状态模型
?
?
3.解决同步问题的一个办法——完全同步对象
完全同步对象必须满足的所有条件
一个完全同步类的例子:
?
?
?
?
完全同步类的缺点很明显:锁会把你的速度拖慢,这也是并发处理方式主要的问题
?
3.Java中确立临界区的关键字为什么是sychronized?而不是"critical"或者是“locked”
? 以前,程序员可能不容易碰到支持多处理器系统,因此并发编程过去主要考虑如何分享CPU时间(多个线程在单核上轮流上位,相互调换)。如今,多核处理器很普遍,我们应该吧多个线程在同一物理时刻运行在不同处理器上(并且很可能会操作共享的数据)。
?
?
被同步的是在不同线程中表示被锁定对象的内存块,也就是说,在sychronized代码块(或者方法)执行完之后,被锁定对象所做的任何修改全部都会在线程释放锁之前刷回到主内存中。当进入一个同步代码块,得到线程锁之后,被锁定对象的任何修改都是从主内存中读出来的,所以在锁定区域代码开始执行之前,持有锁的的线程和锁定对象主内存中的视图同步了
4.关键字volatile
一个volatile域需要遵循如下规则:
程序员可以借此编写简化的代码,但是付出的代价是每次访问都要额外刷一次内存。volatile变量不会引起线程锁,所以使用volatile编程不可能发生死锁。更微妙的是volatile编程式真正线程安全的,但是只有写入时不依赖当前状态的变量才应该声明为volatile变量。对于要关注当前状态的变量,只能借助锁保证其绝对安全性。也可以理解volatile只是为了它的通信效果,而不是为了互斥访问。
?
以上内容全部来自《Java程序员修炼之道》如果想具体了解,可以看看原书
?
原文:http://wechasing.iteye.com/blog/2152555