首页 > 解决方案 > 读/写锁的条件

问题描述

在Java中,既然ReadLocks不能有条件,那么在 之间使用条件的正确方法是Read/Write locks什么?

这是我的并发队列类:

private class ConcurrentQ{
        ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
        Lock readLock = readWriteLock.readLock();
        Lock writeLock = readWriteLock.writeLock();
        Condition emptyList = writeLock.newCondition();
        Queue<Integer> list = new LinkedList<>();

        /* */
        public void push(int x, int thread){
            try{
                writeLock.lock();
                list.offer(x);
                emptyList.signalAll();
            } catch (Exception ex){
            } finally {
                writeLock.unlock();
            }
        }

        //Must look at empty case
        public void pop(int thread){
            int val = -1;
            try{
                writeLock.lock();
                val = list.poll();
            } catch (Exception e){
            } finally {
                writeLock.unlock();
            }
        }

        public void peek(int thread){
            int val = -2;
            try{
                readLock.lock();
                while(list.isEmpty())
                    emptyList.await(); //////PROBLEM HERE!
                val = list.peek();
            }  catch (Exception e) {
            } finally {
                readLock.unlock();
            }
        }
    }

这里有一个问题。由于ReadLock不能有条件,我在WriteLockBUT 中添加了一个条件,但我不能在我正在使用的块内调用它,readLock.lock() ... readLock.unlock()所以我该怎么办?在我的方法中,如果为空peek(),我想等待。list

谢谢

标签: javamultithreading

解决方案


推荐阅读