2 java multithreading locking global
关于Java中的同步,我有一个相对简单(也许是愚蠢的)问题.
我有同步块,在我的代码中获取各种对象的锁.在某些情况下,我想获取一个全局锁,它包含我的代码中的每个其他同步语句.
有没有一种奇特的方法在Java中执行此操作而不重写所有当前的同步代码?
例如,
synchronized (o1)
{
synchronized (o2)
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
synchronized (global_lock)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
当线程t2在同步块内时,不应允许线程t1获取o1和o2上的锁.
非常感谢,如果
Rob*_*anu 11
它容易出现死锁,因为它会迫使您对所有锁具有预先确定的锁定顺序,无论它们位于何处.
通常这是一个好主意,如果你需要获得两个锁,总是有一个预定的顺序:
synchronized(LOCK1) {
synchronized(LOCK2) {
}
}
Run Code Online (Sandbox Code Playgroud)
但是全局锁需要某种协议 - 全局采购订单 - 用于所有锁.这根本不可能.大多数锁具保护特定的,独立的关键部分.他们不会意识到有人会"猛拉"他们并获取他们,因此不会被写入来处理这种情况.
所以这是不可能的,你应该感到高兴它不是.虽然这似乎是一个简单的方法,但它会带来很多痛苦.
| 归档时间: |
|
| 查看次数: |
3255 次 |
| 最近记录: |