有多个线程同时往一个BlockingQueue中放数据,多个线程从这个BlockingQueue中取数据
怎么做才能保证put 或 take 之后 正确的打印出这个队列中元素的数目呢?
如下:
take线程:
while (true) {
            lock.lock();
            Integer i = 0;
            try {
                i = (Integer) queue.take();
                System.out.println(this.getName() + " take " + i + " ......" + queue.size());
            } catch (InterruptedException ex) {
                Logger.getLogger(PutThread.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                lock.unlock();
            } }
put线程:
while (true) {
            lock.lock();
            Integer i = new Random().nextInt(10) + 1;
            try {
                queue.put(i);//此处应用put take 。如果用add时,成功返回true,失败则抛出异常
            } catch (InterruptedException ex) {
                Logger.getLogger(PutThread.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                lock.unlock();
            }
            System.out.println(this.getName() + " add " + i + " ......" + queue.size());
        }如果这两个锁是同一个的话显然是不行的。不一样的话也不可以。应该怎么办呢?
或者是要求这样的话就不能使用BlockingQueue了?????