java - 对象内部监视器作为 java.util.concurrent.Lock

标签 java multithreading locking

我相信能够将对象的监视器用作 会非常有用。那就是:

synchronized(object) {
    ...
}

相当于:

lock.lock();
try {
    ...
} finally {
    lock.unlock();
}

据我所知,使用 Lock 接口(interface)是不可能实现的,因为同步只发生在 block 中。 我看到的一个解决方案是用一个额外的方法来丰富 java.lang.Object

public Lock asLock/getIntrinsicMonitorObject(); // Name isn't perfect but i'm not asking for that

或类似的东西:

LockSupport.getIntrinsicMonitorObject(Object of);

问题:

  • 是否有一些充分的理由目前无法执行此操作(我认为某些 tryLock 当前不可能与同步不是一个事实)

  • 是否有使用现有 JRE 类的解决方案?

  • 关于此的 JSR 是否有意义?

最佳答案

Unsafe 类* 支持直接操作监视器:

public native void monitorEnter(Object o);

public native void monitorExit(Object o);

public native boolean tryMonitorEnter(Object o);

*这是在 Java 8 中,但我认为它已经在 J​​ava 7 中了

关于java - 对象内部监视器作为 java.util.concurrent.Lock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22375370/

相关文章:

sql-server - 只读用户的 SQL Server 权限以防止锁定

c# - 这种锁定和管理锁定异常的解决方案有什么问题?

mysql - 使用 IN(,,,) 生成的行锁会产生死锁吗?

java - 外键没有默认值

java - java中如何连接junit和tomcat?

java - 母语对特定操作系统意味着什么?

c++ - 如何使用循环中的所有内核?

java - CDI Weld 忽略排除项

c++ - C++多线程环境下的内存访问

ruby - 作为开发人员,不同的 Ruby 线程模型(Ruby 与 JRuby)对您的代码有什么实际影响?