【发布时间】:2016-10-10 14:50:00
【问题描述】:
我浏览了文章“http://www.ibm.com/developerworks/java/library/j-jtp10264/”。他们提到“Lock 框架是同步的兼容替代品”。我知道通过使用可重入锁,我们可以跨方法持有锁,等待锁一段时间(使用同步块(或)方法是不可能的)。我的疑问是,是否可以用可重入锁的同步机制替换应用程序?
例如,我想实现一个线程安全的栈数据结构,所有的push、pop、getTop方法都是同步的,所以在多线程环境下,一次只能有一个线程可以访问一个同步方法(如果一个线程正在使用 push 方法,没有其他线程可以访问 push、pop、getTop(或)任何其他 Stack 类的同步方法)。是否可以使用可重入锁实现相同的线程安全堆栈数据结构?如果可能,请提供一个例子来理解这一点。
【问题讨论】:
-
自 Java 5 以来,
synchronized语句有许多替代方案,而不仅仅是Locks。在您的情况下,您可能希望利用java.util.concurrent包中的同步集合,而不是重新发明轮子。 -
是的。我知道并发收集,但我的问题是,是否可以使用锁框架实现完整的线程安全数据结构。
-
你不能用
Locks 但你可以用synchronized做的一件事是通过池对象滥用它。总的来说可能不是一件坏事。
标签: java multithreading synchronization locking