java每隔 消费队列数据_消费者怎么确保能取到数据,又能正确退出线程

现在是这样的

1.首先我最外面有个 quartz 定时器,每隔 N 秒执行一次

2.定时器里执行的内容是这样,里面有个线程池,线程池大小是 2 个线程,coresize,maxsize 都是 2

3.线程池里的 2 个线程,分别一个去执行生产者方法,一个去执行消费者方法

4.生产者和消费者中间用消息队列来临时存数据

现在有个问题,就是消费者这边,怎么能保证取到数据,又能正确的退出线程,进行到下一次定时器的执行

在这之前我做的蠢办法是消费者那边加了个 while(true),结果定时器执行了 2 次后,线程池就满了,然后拒绝

所以不知道有啥好办法

代码:

//线程池的

public class TestTask extends QuartzJobBean {

private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(

2,

2,

60,

TimeUnit.SECONDS,

new LinkedBlockingDeque<>(4));

@Override

protected void executeInternal(JobExecutionContext jobExecutionContext) {

threadPoolExecutor.execute(() -> {

//生产者代码

//数据放入消息队列

});

threadPoolExecutor.execute(() -> {

while (true) {

//取队列里的数据

//消费者代码

}

});

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值