【问题标题】:Why cannot I use primitive as mutex of syncronized section?为什么我不能使用原语作为同步部分的互斥锁?
【发布时间】:2014-07-01 07:25:33
【问题描述】:

我注意到有趣(令我惊讶)的行为:

public void m(){
        int primitive=1;
        synchronized (primitive) {

        }
    }

此代码生成以下内容:

int is not a valid type's argument for the synchronized statement

你能解释一下为什么吗?

【问题讨论】:

标签: java multithreading concurrency primitive critical-section


【解决方案1】:

原语只是一个裸值,仅此而已。这是原语的全部要点,它尽可能简单。添加锁是一种开销,即它增加了 4 个字节,而 Object 的整个标头可以是 16 个字节。

只有对象支持方法和同步。

重要的原因是 byte 使用一个字节,但可以锁定的 Byte 使用 16 到 24 个字节。如果你有一个包含数百万个这样的缓冲区,那么如果你不需要它,那么对锁的支持似乎是一种浪费。

顺便说一句,除非你喜欢混淆,否则你永远不应该锁定一个局部变量或可变变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多