Java并发:阻塞队列

本文探讨了在Java并发中如何利用阻塞队列进行线程间安全的数据传递。通过生产者线程向队列添加元素,消费者线程进行消费,实现了多线程环境下的高效协作。
摘要由CSDN通过智能技术生成

对于实际编程来说,应该尽可能远离底层。

    对于多线程的问题,可以通过使用一个或多个队列以优雅且安全的方式将其形式化。生产者线程想队列插入元素,消费者线程则取出它们。使用队列,可以安全地从一个线程想另一个线程传递数据。

    下面是使用阻塞队列的案例。 

package com.hef.controller;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

/**
 * 不需要显式的线程同步,在这个应用中,使用队列数据结构作为一种同步机制
 * 需求: 一个生成者线程递归读取目标下所有的文件; 开启多个消费者线程,每个搜索线程从队列中取出一个文件,打开它,打印所有包含关键字的行。
 * 然后取出下一个文件。使用一个技巧终止应用程序:当搜索线程取到虚拟对象的时候,将其放回并终止
 * @Date 2019/10/14
 * @Author lifei
 */
public class BlockingQuqueTest {

    private static final int FILE_QUEUE_SIZE = 10;
    private static final int SEARCH_THREADS = 100;
    private static final File DUMMY = new File("");
    private static BlockingQueue<File> queue = new ArrayBlockingQueue<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值