首页  >  问答  >  正文

java - reentrantlock如何锁住某个特定的对象?

如果我有一个长度为10个数组对象:

Object[] arr=new Object[10];

每个对象的访问都是互斥的,但是多个对象之间访问是可以并发的。
那么使用synchonized可以这样:

synchoronized(arr[i]){
    //...
}

我向问,如果使用 reentrantlock如何实现这样的锁?

备注:这样的使用场景我是否需要同时建立10个Lock数组? Lock[] lockList=new ReentrantLock[10]

if(lockList[i].trylock())[
    //
}

这样?

扔个三星炸死你扔个三星炸死你2686 天前864

全部回复(1)我来回复

  • 代言

    代言2017-06-12 09:27:57

    初始化锁:

    Lock[] lockList = new ReentrantLock[10];
    for (int i = 0; i < 10; i ++) {
        lockList[i] = new ReentrantLock();
    }
    

    需要加锁时:

    lockList[i].lock();
    try {
        ...
    } finally {
        lockList[i].unlock();
    }

    回复
    0
  • 取消回复