2013-08-24 95 views
2

我刚开始读Java Concurrency in Practice,从第17页:线程安全的程序如何包含非线程安全的类?

我们使用的术语“线程安全类”和“线程安全程序” 近互换迄今。线程安全的程序是完全由线程安全类构造的 吗?不一定 - 完全由线程安全类组成的程序可能不是 线程安全的,并且线程安全的程序可能包含非线程安全的 类。

  • 如何线程安全的程序可能包含不线程安全类?其他代码示例将非常感激。
+0

无类是在真空中“安全”或“不安全”的所有访问。如果一个类被描述为“线程安全”,仅仅意味着它自己的“合同”不管线程是否被维护,而不是构建在它周围的应用程序将“继承”那个安全。 –

+0

即时阅读同一本书。实际上,我明白一个线程安全的程序如何包含非线程安全的类。然而,我不明白你怎么能有一个程序是不是线程安全的,但完全由线程安全的类组成...... – dtc

回答

5

有两种基本的情况下,这是可能的:

  1. 非线程安全的对象仅限于单个线程。

  2. 访问共享的非线程安全对象由使用它们的线程在外部进行协调。非常简单的例子:通过同步与

    synchronized(sharedObject) { 
         sharedObject.access(); 
        } 
    
1

因为局部变量只能被单线程访问,所以程序可能是线程安全的,并且使用局部变量,这些变量的类在其他情况下是非线程安全的。

+0

或换句话说,你只需要担心在几个线程之间共享的实例是线程安全。 – SJuan76