静态锁 java_为什么锁定对象必须是静态的?

博客讨论了在多线程环境中,使用私有静态只读对象作为锁与非静态只读对象的差异。作者指出,静态锁通过限制访问点来增强封装,确保线程安全。代码示例展示了如何使用这两种锁实现线程间的同步,加载数据。更新部分询问了在面试中哪种方式更为合适。评论和答案建议了考虑静态锁以减少实例化开销和确保类级别的同步。
摘要由CSDN通过智能技术生成

使用私有静态只读对象来锁定多线程是很常见的 . 我知道私有通过收紧封装来减少锁定对象的入口点,因此可以访问最重要的内容 .

但为什么静止?

private static readonly object Locker = new object();

最后,该字段仅在我的 class 中使用,我也可以使用它:

private readonly object Locker = new object();

任何意见?

UPDATE:

作为一个例子,我粘贴了这段代码(只是一个例子) . 我可以使用静态或非静态锁定器,两者都可以正常工作 . 考虑到下面的答案,我应该更喜欢这样定义我的储物柜? (对不起,我下周接受采访,需要知道每一个细节:)

private readonly object Locker = new object();

以下是代码:

private int _priceA;

private int _priceB;

private EventWaitHandle[] _waithandle;

private readonly IService _service;

//ctor

public ModuleAViewModel(IService service)

{

_service = service;

_modelA = new ModelA();

_waithandle = new ManualResetEvent[2];

_waithandle[0] = new ManualResetEvent(false);

_waithandle[1] = new ManualResetEvent(false);

LoadDataByThread();

}

private void LoadDataByThread()

{

new Thread(() =>

{

new Thread(() =>

{

lock (Locker)

{

_priceA = _service.GetPriceA();

}

_waithandle[0].Set();

}).Start();

new Thread(() =>

{

lock (Locker)

{

_priceB = _service.GetPriceB();

}

_waithandle[1].Set();

}).Start();

WaitHandle.WaitAll(_waithandle);

PriceA = _priceA;

PriceB = _priceB;

}).Start();

}

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值