通过参数控制锁行为 - PatternDirClean/PDConcurrent GitHub Wiki
通过传入一个LockThreadContext对象可以实现本线程的锁行为自定义
以下操作在下列三个锁中均有实现,因为他们继承了AbstractSyLock
- ObjLock
- ReLock
- RWLock
具体可自定义的属性包含
- 使用的锁实现
- 是否使用支持中断的上锁方式
- try类型方法获取锁的时间限制,为
null则使用不含有时间参数方法运行,通常会破坏锁的平等性
建议在构造时传入参数,虽然提供了修改接口但是不建议进行修改,尤其是被设置为默认上下文的对象,可能会导致正在使用线程发生异常
可以给锁对象设置默认上下文参数,设置后不要修改该对象的内容,如果需要重新设置请使用新的对象,至少不能是同一个对象。
通过setDefaultLockThreadContext()方法设置
通过setLockThreadContext()方法设置当前线程的上下文参数,线程结束后会释放该对象,随后便可安全的重复使用。
可能会需要使用getLockThreadContext()获取参数的情况,这时要注意如果使用
setLockThreadContext()后没有运行锁则该对象始终被引用。
但如果锁运行完毕,即使线程没有结束,该对象依旧会被释放,也就是getLockThreadContext()获取的参数内容与默认参数一致
如果因为一些意外,导致设置了参数后没有运行锁便结束了线程,那请在结束前运行removeLockThreadContext()方法,否则会导致内存泄露
但如果并没有进行单独设置的话,则不会发生内存泄露