zoukankan      html  css  js  c++  java
  • LinkedTransferQueue

    /**
     *LinkedTransferQueue是有容量的,
     * 当第一个生产者线程调用transfer时,如果没有消费者,会阻塞。
     * 第二个生产者线程调用transfer时,如果没有消费者,会添加到队列的末尾。
     * 直到有消费者进行消费时调用take方法,被阻塞的生产者线程才继续运行
     */
    
    /**
     * LinkedTransferQueue(后称LTQ) 采用一种预占模式。意思就是消费者线程取元素时,
     * 如果队列为空,那就生成一个节点(节点元素为null)入队,
     * 然后消费者线程被等待在这个节点上,后面生产者线程入队时发现有一个元素为null的节点,
     * 生产者线程就不入队了,直接就将元素填充到该节点,并唤醒该节点等待的线程,
     * 被唤醒的消费者线程取走元素,从调用的方法返回
     */
    public  class  LinkedTransferQueueTest {
    
        private  static LinkedTransferQueue<String> queue =  new LinkedTransferQueue<String>();
    
        public static void main(String[] args) throws InterruptedException {
    
            ExecutorService executorService = Executors.newCachedThreadPool();
            executorService.submit(() -> {
                try {
                    System.out.println("a   == "+queue.take());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
            executorService.submit(() -> {
                try {
                    System.out.println("b  == "+queue.take());
    
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
            executorService.shutdown();
            Thread.sleep(50);
            queue.transfer("hello1");
            queue.transfer("hello2");
            System.out.println("^^^^^^^^^^");
        }
    
    
    }
  • 相关阅读:
    线上一个数组查询遇到的坑
    Java加密解密字符串
    图片和字符串相互转换
    fastweixin 微信服务器开发框架
    从url下载图片--java与python实现方式比较
    jvm 配置,看看
    牛腩新闻公布系统---外键约束下怎样删除记录
    jquery常见面试题
    [Oracle] 位图索引
    hadoop经常使用的压缩算法总结和实验验证
  • 原文地址:https://www.cnblogs.com/moris5013/p/12059161.html
Copyright © 2011-2022 走看看