BlockingQueue 实际使用


@Slf4j
@Component
public class BlockQueueDemo {

    private BlockQueueDemo blockInstance;
    @Autowired
    private ObjectWriter witer;
    private BlockingQueue<Object> quene;

    public BlockQueueDemo() {
        blockInstance = this;
        quene = new LinkedBlockingQueue<>();
    }

    /**
     * 数据加入到队列
     */
    public void add(String data, JSONObject data) {
        if (blockInstance == null) {
            return;
        }
        Object obj = blockInstance.setData(data, data);
        if (blockInstance.quene.size() > 10000000) {  //防止内存溢出
            return;
        }
        blockInstance.quene.add(obj);
    }

    private Object setData(String dataId, JSONObject data) {
        Object obj = new Object();
        obj.setId(dataId);
        obj.setdata(data);
        return obj;
    }

@PostConstruct该注解被用来修饰一个非静态的void()方法。
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,
并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。

    @PostConstruct
    public void init() {
        insertPool();  //消费数据消息队列线程
    }

    private void insertPool() {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.execute(() -> {
            while (true) {
                try {
                // 从队列取出数据
                    Object obj = quene.take();
                    witer.insertDate(obj);
                } catch (InterruptedException e) {
                    log.error(e.getMessage());
                }
            }
        });
    }


}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值