美文网首页
多线程的阻塞队列

多线程的阻塞队列

作者: engineer_tang | 来源:发表于2020-07-19 09:38 被阅读0次

1. 简介

Java5提供了一个BlockingQueue接口,主要用途是作为线程同步的工具。
特征:当生产者线程试图向BlockingQueue中放入元素,如果该队列已满,则该线程被阻塞;当消费者线程试图从BlockingQueue中取出元素时,如果该队列已空,则该线程被阻塞。

2. 使用案例

Producer源码

package com.threadtest.queue;

import java.util.concurrent.BlockingQueue;

public class Producer extends Thread {

    private BlockingQueue<String> bq;

    public Producer(BlockingQueue<String> bq, String name) {
        super(name);
        this.bq = bq;
    }

    @Override
    public void run() {
        String[] strarray = {"JAVA", "Spring", "Mybatis"};
        for(int i=0; i<1000; i++) {
            try {
                Thread.sleep(200);
                String str = strarray[i % 3];
                bq.put(str);
                System.out.println(String.format("生产者\"%s\" 生产了字符:%s", Thread.currentThread().getName(), str));
            } catch (InterruptedException e) {

            }
        }
    }
}

Consumer源码

package com.threadtest.queue;

import java.util.concurrent.BlockingQueue;

public class Consumer extends Thread {

    private BlockingQueue<String> bq;

    public Consumer(BlockingQueue<String> bq, String name) {
        super(name);
        this.bq = bq;
    }

    @Override
    public void run() {
        while(true) {
            try {
                Thread.sleep(2000);
                String str = bq.take();
                System.out.println(String.format("消费者\"%s\" 消费了字符: %s", Thread.currentThread().getName(), str));
            } catch (InterruptedException e) {

            }
        }
    }
}

队列执行类

package com.threadtest.queue;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

public class QueueTest {

    public static void main(String[] args) {
        BlockingQueue<String> bQueue = new ArrayBlockingQueue(1);
        new Producer(bQueue, "生产线程1").start();
        new Producer(bQueue, "生产线程2").start();
        new Producer(bQueue, "生产线程3").start();
        new Consumer(bQueue, "消费线程").start();
    }
}

相关文章

  • c++ 实现 blocking queue

    阻塞队列就是多线程线程安全的队列,在多线程场景下经常用到,c++ 标准库里面没有提供阻塞队列,boost 中有提供...

  • Java多线程(二十六)---java中的阻塞队列

    移步java多线程系列文章 1 什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列...

  • Android多线程之常见的线程形态

    Android 多线程系列 Android 多线程之几个基本问题 Android 多线程之阻塞队列 Andorid...

  • Android 多线程之线程池

    Android 多线程系列 Android 多线程之几个基本问题 Android 多线程之阻塞队列 Android...

  • Android 多线程之阻塞队列

    Android 多线程系列 Android 多线程之几个基本问题 Android多线程之常见的线程形态 阻塞队列 ...

  • Java 阻塞队列

    简介 java 的阻塞队列是应用在多线程中,尤其适合生产者和消费者模式,阻塞队列支持阻塞操作,线程安全,已经实现了...

  • 阻塞队列

    BlockingQueue线程池的数据结构是阻塞队列BlockingQueue。(在多线程领域:所谓阻塞,在某些情...

  • Java阻塞队列详解

    作者: 一字马胡 转载标志 【2017-11-03】 更新日志 阻塞队列 阻塞队列是一种队列,一种可以在多线程环...

  • Java多线程(10)

    Java多线程(10) 非阻塞队列 ConcurrentHashMap HashMap在多线程条件下的不安全性: ...

  • 多线程的阻塞队列

    1. 简介 Java5提供了一个BlockingQueue接口,主要用途是作为线程同步的工具。特征:当生产者线程试...

网友评论

      本文标题:多线程的阻塞队列

      本文链接:https://www.haomeiwen.com/subject/bjllkktx.html