打字猴:1.700451617e+09
1700451617
1700451618 final ReentrantLock lock=this.lock;
1700451619
1700451620 //可中断锁
1700451621
1700451622 lock.lockInterruptibly();
1700451623
1700451624 try{
1700451625
1700451626 try{
1700451627
1700451628 //队列满,等待其他线程移除元素
1700451629
1700451630 while(count==items.length)
1700451631
1700451632 notFull.await();
1700451633
1700451634 }catch(InterruptedException ie){
1700451635
1700451636 //被中断了,唤醒其他线程
1700451637
1700451638 notFull.signal();
1700451639
1700451640 throw ie;
1700451641
1700451642 }
1700451643
1700451644 //插入元素
1700451645
1700451646 insert(e);
1700451647
1700451648 }finally{
1700451649
1700451650 //释放锁
1700451651
1700451652 lock.unlock();
1700451653
1700451654 }
1700451655
1700451656 }
1700451657
1700451658 put方法的目的就是确保元素肯定会加入到队列中,问题是此种等待是一个循环,会不停地消耗系统资源,当等待加入的元素数量较多时势必会对系统性能产生影响,那该如何解决呢?JDK已经想到了这个问题,它提供了带有超时时间的offer方法,其实现方法与put比较类似,只是使用Condition的awaitNanos方法来判断当前线程已经等待了多少纳秒,超时则返回false。
1700451659
1700451660 与插入元素相对应,取出元素也有不同的实现,例如remove、poll、take等方法,对于此类方法的理解要建立在阻塞队列的长度固定的基础上,然后根据是否阻塞、阻塞是否超时等实际情况选用不同的插入和提取方法。
1700451661
1700451662 注意 阻塞队列的长度是固定的。
1700451663
1700451664
1700451665
1700451666
[ 上一页 ]  [ :1.700451617e+09 ]  [ 下一页 ]