《Java Concurrency in Practice》之线程安全性
2014-03-28 08:44
267 查看
或许令人感到奇怪的是,并发编程并不像大家所想的那样,需要使用大量的线程或者锁,至多不会超过土木工程中铆钉和工字梁的数量。当然,要建造一座坚固的桥梁,需要正确地使用大量的铆钉和工字梁。同理,构建稳健的并发程序时,也需要正确地使用线程和锁。但是,这些终归只是一些机制。编写线程安全的代码,其核心在于管理访问状态,特别是对共享的和可变的这两种状态的访问。
从非正式的意义来讲,对象的状态是指存储在状态变量中的数据,例如实例或静态变量。
如果多个线程同时访问同一个可变的状态变量,而没有合适的同步,那么你的程序将出错。此时,有三种方法可以修复:(1)、跨线程间不要共享状态变量;(2)、使状态变量不可变;(3)、访问状态变量时使用同步。
在设计线程安全的类时,良好的面向对象技术——封装性,不可修改性,不变量的清晰规范,都能起到很好的帮助作用(are
your best friends)。当然,该理论不适用于所有情况。一种合理的编程方法是:首先使代码正确运行,然后再提高代码的速度。
正确的理解“线程安全的类”和“线程安全的程序”这两个概念,是决定对线程安全认知程度的关键。值得注意的是,线程安全的程序并非完全由线程安全类构成。由线程安全类构成的程序,并不一定就是线程安全的;线程安全的类,也可以是非线程安全的类。
线程安全性,是指:当多个线程访问某个类时,不管运行时环境采用何种调度方式,或者这些线程将如何交替执行,并且在主要调度代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为。
常识,无状态的对象一定是线程安全的。
从非正式的意义来讲,对象的状态是指存储在状态变量中的数据,例如实例或静态变量。
如果多个线程同时访问同一个可变的状态变量,而没有合适的同步,那么你的程序将出错。此时,有三种方法可以修复:(1)、跨线程间不要共享状态变量;(2)、使状态变量不可变;(3)、访问状态变量时使用同步。
在设计线程安全的类时,良好的面向对象技术——封装性,不可修改性,不变量的清晰规范,都能起到很好的帮助作用(are
your best friends)。当然,该理论不适用于所有情况。一种合理的编程方法是:首先使代码正确运行,然后再提高代码的速度。
正确的理解“线程安全的类”和“线程安全的程序”这两个概念,是决定对线程安全认知程度的关键。值得注意的是,线程安全的程序并非完全由线程安全类构成。由线程安全类构成的程序,并不一定就是线程安全的;线程安全的类,也可以是非线程安全的类。
线程安全性,是指:当多个线程访问某个类时,不管运行时环境采用何种调度方式,或者这些线程将如何交替执行,并且在主要调度代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为。
常识,无状态的对象一定是线程安全的。
相关文章推荐
- Java Concurrency in Practice ---线程安全性
- Java并发编程学习——《Java Concurrency in Practice》学习笔记 2.线程安全性
- [Java Concurrency in Practice]第二章 线程安全性
- Java并发编程学习——《Java Concurrency in Practice》学习笔记 3.对象的共享
- 《Java Concurrency in Practice》 学习笔记--第一章:引言
- 《Java Concurrency in Practice》 学习笔记--第二章:线程安全
- Java Concurrency in Practice :基础知识(重排序与可见性)
- Java并发编程学习——《Java Concurrency in Practice》学习笔记 4.对象的组合
- 《Java Concurrency in Practice》ch6 Task Execution
- Java Concurrency in Practice 之Volatile和ThreadLocal
- Java Concurrency in Practice 笔记
- Java Concurrency in Practice
- [Java Concurrency in Practice]第五章 基础构建模块
- Java并发编程学习——《Java Concurrency in Practice》学习笔记 5.基础构建模块
- 变量可见性和volatile, this逃逸, 不可变对象, 以及安全公开--Java Concurrency In Practice C03读书笔记
- Java Concurrency In Practice 阅读笔记(第一、二部分)
- Java并发编程学习——《Java Concurrency in Practice》学习笔记 并发技巧清单
- 《Java Concurrency in Practice》之Disruptor简单类图
- 《Java Concurrency in Practice》之加锁机制(Locking)
- [Java Concurrency in Practice]二至五章小结