我对Java的MultiThreading概念非常了解。
我正在研究ReentrantLock的特性和用法。我知道它比同步更加灵活,并且增加了很少的特性。
我可以看到上面提到的例子,而且我做得很好。
我无法弄清楚,在什么情况下,它将对商业有帮助。
我看得出最好避免死锁。
如果没有ReentrantLock,就很难解决这样的用例,有人能提供用例吗?
或者可以指向某个链接将是有帮助的。
发布于 2013-11-01 05:26:15
对于简单的情况,对于要求性能的应用程序,时间锁/或部分锁如何?
一个非常常见的例子是在线门户网站,它允许您购买/预订票(任何)。你在你感兴趣的座位/资源上有一个定时锁。在时间到期之后,如果事务未完成,任何其他客户端应用程序(线程)都可以获得对其的锁定。
发布于 2013-11-01 05:43:19
ReentrantLock可用于超时要求。假设您正在尝试获取一个锁,但是在那个时候锁已经被获取,您可以使用tryLock(),它将立即返回,然后您可以再试一次。
ReentrantLock还有其他一些优点,就是通过它的con结构提供fairLock或unFair:
public ReentrantLock(boolean fair)如果您将fair作为false,它将不会为您提供一个带有公平排序的锁。不公平的命令执行公平的锁。如果你需要更多细节我可以解释。
但是ReentrantLock的问题是,很难调试,因为在日志中它不能解释锁的所有者,但是在同步中是可能的。这是最大的缺点。
您可以使用这种锁定机制来实现像餐饮哲学家这样的特性。如果两根棍子都可用,那就去吃吧,扔掉你现在拿着的那根。
public void run() {
while (!Thread.currentThread().isInterrupted()) {
if (l.getLeftLock().tryLock()) {
try {
if (r.getRightLock().tryLock()) {
try {
System.out.println("Eating philosopher1 !!!!");
} finally {
r.getRightLock().unlock();
}
}
} finally {
l.getLeftLock().unlock();
}
}
try {
Thread.currentThread().sleep((int) (100 * Math.random()));
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}发布于 2013-11-01 07:50:58
对于ReentrantLock类,与普通的synchronized相比,我认为主要的好处是:
此外,我还有点离题,但是对于理解java并发类,我发现Java并发动画非常有用。下载可运行的jar文件并查看自己。
https://stackoverflow.com/questions/19721197
复制相似问题