当前位置: 代码迷 >> 综合 >> SynchronousQueue api详解
  详细解决方案

SynchronousQueue api详解

热度:26   发布时间:2024-02-02 05:13:04.0

今天时间学习SynchronousQueue api,该类是JUC原子包中的类,通过单元测试代码把所有public api方法跑了一遍,大致了解了底层实现,初学乍练,有很多一知半解的地方,待后续有了深入理解再来补充

package test.java.util.concurrent;import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.Spliterator;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;import org.junit.Test;/*** SynchronousQueue的测试类** @date 2020-07-28 21:38:09*/
public class SynchronousQueueTest {/*** 默认非公平锁初始化同步队列* @Param*/@Testpublic void testConstruct0()throws Exception{SynchronousQueue testObj=new SynchronousQueue();System.out.println(testObj.toString());}/***指定锁的类型初始化同步队列* @Param*/@Testpublic void testConstruct1()throws Exception{SynchronousQueue testObj=new SynchronousQueue(false);System.out.println(testObj.toString());}/***存入元素* @Param*/@Testpublic void testPut()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.put(333);testObj.put(33);System.out.println(testObj.take());System.out.println(testObj.take());System.out.println(testObj.take());}/***如果队列已满,等待指定时间* @Param*/@Testpublic void testOffer()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer(3333,3, TimeUnit.SECONDS);testObj.offer(33,3,TimeUnit.SECONDS);System.out.println(testObj.peek());System.out.println(testObj.peek());System.out.println(testObj.peek());}/***放入队列元素* @Param*/@Testpublic void testOffer1()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer(3333);testObj.offer(33);System.out.println(testObj.peek());System.out.println(testObj.peek());System.out.println(testObj.peek());}/***阻塞式获取元素* @Param*/@Testpublic void testTake()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.put(2);System.out.println(testObj.take());System.out.println(testObj.take());}/*** 弹出元素* @Param*/@Testpublic void testPoll()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.put(2);System.out.println(testObj.poll());System.out.println(testObj.poll());}/*** 在指定时间内弹出* @Param*/@Testpublic void testPoll1()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.put(2);System.out.println(testObj.poll(1,TimeUnit.SECONDS));System.out.println(testObj.poll(1,TimeUnit.SECONDS));}/*** 判断队列是否为空* @Param*/@Testpublic void testIsEmpty()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer(3333);testObj.offer(2222);System.out.println(testObj.isEmpty());}/***获取队列大小* @Param*/@Testpublic void testSize()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer(3333);testObj.offer(2222);System.out.println(testObj.size());}/*** 剩余容量* @Param*/@Testpublic void testRemainingCapacity()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer(3333);testObj.offer(2222);System.out.println(testObj.remainingCapacity());}/*** 清空队列* @Param*/@Testpublic void testClear()throws Exception{SynchronousQueue testObj=new SynchronousQueue(false);testObj.offer(3333);System.out.println(testObj.size());testObj.clear();System.out.println(testObj.size());}/***是否包含* @Param*/@Testpublic void testContains()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer(3333);testObj.offer(2222);System.out.println(testObj.contains(2222));}/*** 移除指定元素* @Param*/@Testpublic void testRemove()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer(3333);testObj.offer(2222);testObj.remove(2222);System.out.println(testObj.size());}/*** 是否包含集合中所有元素* @Param*/@Testpublic void testContainsAll()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer(3333);testObj.offer(2222);Set<Integer> set=new HashSet<>();set.add(3333);System.out.println(testObj.containsAll(set));}/*** 移除包含在集合中的所有元素* @Param*/@Testpublic void testRemoveAll()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer(3333);testObj.offer(2222);Set<Integer> set=new HashSet<>();set.add(3333);System.out.println(testObj.removeAll(set));}/*** 求交集* @Param*/@Testpublic void testRetainAll()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer(3333);testObj.offer(2222);Set<Integer> set=new HashSet<>();set.add(3333);System.out.println(testObj.retainAll(set));}/*** 获取头部元素* @Param*/@Testpublic void testPeek()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer(3333);testObj.offer(2222);System.out.println(testObj.peek());System.out.println(testObj.peek());System.out.println(testObj.peek());}/***通过迭代器遍历* @Param*/@Testpublic void testIterator()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer(3333);testObj.offer(2222);Iterator iterator=testObj.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}}/***通过拆分器遍历队列中所有元素* @Param*/@Testpublic void testSpliterator()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer("3213");testObj.offer("3111");testObj.offer("3222");testObj.offer("3333");Spliterator<String> spliterator=testObj.spliterator();spliterator.forEachRemaining(s -> System.out.println(s));}/*** 转换成对象数组并返回* @Param*/@Testpublic void testToArray()throws Exception{SynchronousQueue testObj=new SynchronousQueue(false);testObj.offer(3333);testObj.offer(33);for (int i = 0; i < testObj.toArray().length; i++) {System.out.println(testObj.toArray()[i]);}}/*** 将队列中的元素放入指定对象数组中并返回* @Param*/@Testpublic void testToArray1()throws Exception{SynchronousQueue testObj=new SynchronousQueue(false);testObj.offer(3333);testObj.offer(33);for (int i = 0; i < testObj.toArray(new Object[testObj.size()]).length; i++) {System.out.println(testObj.toArray()[i]);}}/***将队列中元素一次性拷贝到指定集合中,并返回大小* @Param*/@Testpublic void testDrainTo()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer(3333);System.out.println(testObj.drainTo(new HashSet()));}/***将队列中元素一次性拷贝到指定集合中,并返回大小,最多存入指定元素数量* @Param*/@Testpublic void testDrainTo1()throws Exception{SynchronousQueue testObj=new SynchronousQueue();testObj.offer(1111);testObj.offer(0000);testObj.offer(5555);testObj.offer(6666);testObj.offer(4444);System.out.println(testObj.drainTo(new HashSet(),3));}}