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) 图像链接容易中断,使您的问题变得毫无意义。