多线程交互使用的数据结构,了解一下



    /*
     * 多线程之间交互
     * 线程阀是一种线程与线程之间相互制约和交互的机制
     * 
     * 
     * 阻塞队列BlockingQueue
     * 
     * Queue 队列:先进显出
     * Deque 双端队列:两端都可以进出的队列,当约束一端的时候就成了栈结构
     * 
     * 阻塞队列 BlockingQueue 是一个支持两个附加操作的队列
     * 在队列为空时,获取元素的线程会等待队列变为非空
     * 当队列满时:存储元素的线程会等队列可用
     * 
     * 阻塞队列常用于生产者和消费者的场景
     */


        public static void main(String[] args) {
            /*
             * 数组阻塞队列
             * 典型的有界缓存区
             */
            ArrayBlockingQueue<Object> arrayBlockingQueue = new ArrayBlockingQueue<>(1);


            /*
             * 链表阻塞队列
             */
            LinkedBlockingDeque<Object> linkedBlockingDeque = new LinkedBlockingDeque<>();


            //优先级阻塞队列 支持优先级排序的无界队列
//          优先级的判断痛殴构造函数传入的compator对象决定
//          不会阻塞数据的生产者,只会没有可消费的数据时,阻塞数据的消费者
//          生产者速度快于消费者速度,时间一长,会耗尽所有的可用堆内存空间
//          内部控制线程同步的锁采用的是公平锁
            PriorityBlockingQueue<Object> priorityBlockingQueue = new PriorityBlockingQueue<>();



//          延时队列
//          缓存系统的设计
//          定时任务调度
//          作为delayqueue元素的时候必须实现delayed接口的两个方法
            DelayQueue<Delayed> delayQueue = new DelayQueue<>();


//          同步队列
//          是一个不存储元素的阻塞队列,每一个put操作必须等待一个take操作,否则不能继续添加元素,
//          负责传递数据,
//          本身不存任何元素
//          两种机制
//          公平模式 :阻塞多余的生产和消费者
//          非公平模式:很容易出现饥渴现象

            SynchronousQueue<Object> synchronousQueue = new SynchronousQueue<>();

//          链表双向阻塞队列
            LinkedBlockingDeque<Object> linkedBlockingDeque2 = new LinkedBlockingDeque<>();

//          链表传输队列
//          是一个由链表结构组成的无界传输阻塞队列
//          双重数据结构
//          方法都是通过两个步骤完成:保留与完成
            LinkedTransferQueue<Object> linkedTransferQueue = new LinkedTransferQueue<>();


这些都没用过,也没见人用过,项目中用的是redis队列
就当是了解了吧,

猜你喜欢

转载自blog.csdn.net/java_sparrow/article/details/81227867
今日推荐