2015-07-11 63 views
0

我是新来的并发编程。当我正在浏览同步,线程安全集合,原子包装类,锁之间的混淆时, 锁和同步通过使一段代码线程安全来完成相同的工作。为什么我们需要线程安全的集合或原子包装类呢?由于锁定将只允许单个线程访问代码,并且不会让集合或基元类型变得不安全。同步vs线程安全集合vs原子包装类vs锁

回答

2

这是一个非常广泛的问题,你问。问题是,并非所有这些东西都有单一严格的定义。例如,线程安全集合可能使用各种形式的同步(如锁或原子操作)来实现线程安全。但是,甚至连“线程安全”这个术语都没有明确定义!

然而,有一件事你错了肯定:同步是我们的目标,而锁,互斥体,原子能等都是手段来实现这一目标。同步意味着不同的线程以同步的方式访问资源。换句话说,他们协调访问,以便它们不会互相影响。顺便说一句:我在这里谈论线程,但不同的实体也可能是进程或甚至不同的计算机,但让我们先保持简单。

现在,你问使用“线程安全的集合或原子包装类”,为什么他们都需要在所有。答案很简单,这些东西在更高的层次上提供了不同的接口或服务。例如,当我有一个连接两个线程的FIFO时,它们如何同步对底层队列的访问并不重要。如果两个线程的接口已正确实现,则可以获得一定的保证。用锁来手动执行操作是可能的,但是很复杂,因此除了低级原语之外,将它们提供为高级构建块只会使软件开发更容易,结果更可靠。

最后一个提醒的其他问题:如开头所提到的,并不是所有的条款都与他们相关的普遍意义。因此,如果您提供了其他信息,特别是您打算使用的编程语言,它将有所帮助。

+0

谢谢@Ulrich ..语言是java ...的解释是非常好的和描述性的 –

2

因为使用同步时需要小心。如果你滥用它,你可能会遇到性能问题。如果可能,使用线程安全集合通常对性能更好,并确保没有错误或死锁。