栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

解锁另一个线程java拥有的锁

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解锁另一个线程java拥有的锁

你会被允许使用自己的

Lock
吗?这是一个完全代理的类,
Lock
但是当被告知强制进行解锁时,它仅替换了它要替换的新锁。这应该具有您想要的效果。遗憾的是,它仍然无法处理悬空的锁,但现在变成了别人的问题。现在,您的锁已神奇解锁。

static class LockProxy<L extends Lock> implements Lock {    // The actual lock.    private volatile Lock lock;    public LockProxy(L lock) {        // Trap the lock we are proxying.        this.lock = lock;    }    @Override    public void lock() {        // Proxy it.        lock.lock();    }    @Override    public void lockInterruptibly() throws InterruptedException {        // Proxy it.        lock.lockInterruptibly();    }    @Override    public boolean tryLock() {        // Proxy it.        return lock.tryLock();    }    @Override    public boolean tryLock(long l, TimeUnit tu) throws InterruptedException {        // Proxy it.        return lock.tryLock(l, tu);    }    @Override    public void unlock() {        // Proxy it.        lock.unlock();    }    @Override    public Condition newCondition() {        // Proxy it.        return lock.newCondition();    }    // Extra functionality to unlock from any thread.    public void forceUnlock() {        // Actually just replace the perhaps locked lock with a new one.        // Kinda like a clone. I expect a neater way is around somewhere.        if (lock instanceof ReentrantLock) { lock = new ReentrantLock();        } else { throw new UnsupportedOperationException(     "Cannot force unlock of lock type "         + lock.getClass().getSimpleName());        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/425908.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号