您的位置:首页 > 编程语言 > Java开发

《Java Concurrency in Practice》之线程安全性

2014-03-28 08:44 267 查看
    或许令人感到奇怪的是,并发编程并不像大家所想的那样,需要使用大量的线程或者锁,至多不会超过土木工程中铆钉和工字梁的数量。当然,要建造一座坚固的桥梁,需要正确地使用大量的铆钉和工字梁。同理,构建稳健的并发程序时,也需要正确地使用线程和锁。但是,这些终归只是一些机制。编写线程安全的代码,其核心在于管理访问状态,特别是对共享的和可变的这两种状态的访问。

    从非正式的意义来讲,对象的状态是指存储在状态变量中的数据,例如实例或静态变量。

    如果多个线程同时访问同一个可变的状态变量,而没有合适的同步,那么你的程序将出错。此时,有三种方法可以修复:(1)、跨线程间不要共享状态变量;(2)、使状态变量不可变;(3)、访问状态变量时使用同步。

    在设计线程安全的类时,良好的面向对象技术——封装性,不可修改性,不变量的清晰规范,都能起到很好的帮助作用(are
your best friends)。当然,该理论不适用于所有情况。一种合理的编程方法是:首先使代码正确运行,然后再提高代码的速度。

    正确的理解“线程安全的类”和“线程安全的程序”这两个概念,是决定对线程安全认知程度的关键。值得注意的是,线程安全的程序并非完全由线程安全类构成。由线程安全类构成的程序,并不一定就是线程安全的;线程安全的类,也可以是非线程安全的类。

    线程安全性,是指:当多个线程访问某个类时,不管运行时环境采用何种调度方式,或者这些线程将如何交替执行,并且在主要调度代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为。

    常识,无状态的对象一定是线程安全的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息