Java 为什么jdk需要使用;“最后的”;创建“的对象”;信号量;?

Java 为什么jdk需要使用;“最后的”;创建“的对象”;信号量;?,java,Java,它是不需要更改的“信号量”对象吗?将可用字段声明为最终可确保该字段的值对所有线程可见,而无需任何其他同步。这是必要的,因为您有两个方法(getItem和putItem)在不进行任何同步的情况下使用该字段 如果省略了final,则一些线程可能会看到available的预初始化值(即null),并在第一次调用getItem方法时获得NPE (出于设计或偶然,这在putItem方法中不是问题。在访问available之前,您正在调用markAsUsed。markAsUsed方法在this上同步,它应该


它是不需要更改的“信号量”对象吗?

可用
字段声明为
最终
可确保该字段的值对所有线程可见,而无需任何其他同步。这是必要的,因为您有两个方法(
getItem
putItem
)在不进行任何同步的情况下使用该字段

如果省略了
final
,则一些线程可能会看到
available
的预初始化值(即
null
),并在第一次调用
getItem
方法时获得NPE

(出于设计或偶然,这在
putItem
方法中不是问题。在访问
available
之前,您正在调用
markAsUsed
markAsUsed
方法在
this
上同步,它应该提供所需的事件,以确保线程随后看到正确的
a。)可用
值。)



值得注意的是,(通常)将永远不应更改的字段声明为
final
。如果没有其他内容,这将记录您的意图。

请不要将代码作为图像发布。1)这会导致无法剪切和粘贴。2) 图像链接容易中断,使您的问题变得毫无意义。