zoukankan      html  css  js  c++  java
  • java 双端队列 Deque

    简单的实现生产者消费者模式。

    package com.citi.test.mutiplethread.demo0503;
    
    import java.util.Arrays;
    import java.util.UUID;
    import java.util.concurrent.LinkedBlockingDeque;
    
    public class ProducerDeque implements Runnable{
        private LinkedBlockingDeque<String> deque;
        
        public ProducerDeque(LinkedBlockingDeque<String> deque) {
            this.deque=deque;
        }
    
        @Override
        public void run() {
            while(true){
                try {
                    String str=UUID.randomUUID().toString();
                    System.out.println(Thread.currentThread().getName()+"生产了:"+str);
                    deque.putFirst(str);
                    System.out.println(Thread.currentThread().getName()+"生产了:"+Arrays.toString(deque.toArray()));
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    
    }
    package com.citi.test.mutiplethread.demo0503;
    
    import java.util.concurrent.LinkedBlockingDeque;
    
    public class ConsumerDeque implements Runnable{
    
        private LinkedBlockingDeque<String> deque;
        public ConsumerDeque(LinkedBlockingDeque<String> deque) {
            this.deque = deque;
        }
    
        @Override
        public void run() {
            while(true){
                try {
                    System.out.println(Thread.currentThread().getName()+"消费了:"+deque.takeLast());
                    Thread.sleep(800);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            
        }
    
    }
    package com.citi.test.mutiplethread.demo0503;
    
    import java.util.concurrent.LinkedBlockingDeque;
    
    public class LinkedBlockingDequeTest {
        public static void main(String[] args) {
            LinkedBlockingDeque<String> producerDeque=new LinkedBlockingDeque<String>();
            
            new Thread(new ProducerDeque(producerDeque)).start();
            new Thread(new ProducerDeque(producerDeque)).start();
            new Thread(new ProducerDeque(producerDeque)).start();
            new Thread(new ProducerDeque(producerDeque)).start();
            
            new Thread(new ConsumerDeque(producerDeque)).start();
        }
    }

  • 相关阅读:
    SQL Server 2008R2 附件数据库问题记录
    关于.NET C#调用Sqlite的总结二
    关于.NET C#调用Sqlite的总结一
    MS Server中varchar与nvarchar的区别
    Intellij IDEA中使用Debug调试
    使用idea关联mysql时报错Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezon'
    学Redis这篇就够了
    java的动态代理机制详解
    mybatis-sql执行流程源码分析
    mybatis
  • 原文地址:https://www.cnblogs.com/liumy/p/11587576.html
Copyright © 2011-2022 走看看