gst*_*low 0 java concurrency primitive multithreading critical-section
我注意到有趣的(令我惊讶的)行为:
public void m(){
int primitive=1;
synchronized (primitive) {
}
}
Run Code Online (Sandbox Code Playgroud)
此代码生成以下内容:
int is not a valid type's argument for the synchronized statement
Run Code Online (Sandbox Code Playgroud)
你能解释一下原因吗?
原语只是一个裸值,没有别的.这是一个原始的整点,它尽可能简单.添加锁是一种开销,即它添加4个字节,而Object的整个头可以是16个字节.
只有对象支持方法和同步.
它重要的原因是a byte使用一个字节,但Byte可锁定的使用16到24个字节.如果你有一个包含数百万个缓冲区的缓冲区,那么如果你不需要它,那么支持锁就好像是浪费.
顺便说一下,除非你喜欢混淆,否则你永远不应该锁定本地或可变变量.