about lock

关于锁有三个标准:
1,能否正确做到互斥
2,能否做到公平(有些人处于饥饿状态)
3,能否有效率,不要死循环去查询锁是否就绪了

load-and-store
最简单的锁就是尝试去设置一本变量的位,其他的人则死循环等待

test-and-set 
就是一个原子的是不是0位然后设置为1,这个锁有个问题就是
 
compare-and-swap
void lock(lock_t *lock) {
 while (CompareAndSwap(&lock->flag, 0, 1) == 1)
 ; // spin
 }
 
 
 由于ThreadLocalMap的生命周期跟Thread一样长,如果没有手动删除对应key就会导致内存泄漏,而不是因为弱引用。
 因此在每次使用完ThreadLocal 之后,都要调用它的remove()方法,清除数据。
 在使用线程池的情况下,没有及时清理ThreadLocal,不仅是内存泄漏的问题,更严重的是可能导致业务逻辑出现问题。
 所以,使用ThreadLocal就跟加锁完要解锁一样,用完就清理。

 java的lock是一个接口,一般使用reentrablelock来实现,
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值