All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.weicoder.common.queue.AsynQueue Maven / Gradle / Ivy

package com.weicoder.common.queue;

import java.util.Collection;
import java.util.Queue;

import com.weicoder.common.U;
import com.weicoder.common.concurrent.ScheduledUtil; 
import com.weicoder.common.interfaces.CallbackVoid;
import com.weicoder.common.log.Log;
import com.weicoder.common.log.LogFactory;
import com.weicoder.common.util.MathUtil;

/**
 * 异步回调处理队列数据
 * 
 * @author WD
 */
public class AsynQueue {
	// 日志
	private final static Log LOG = LogFactory.getLog(AsynQueue.class);
	// 队列
	private Queue queue;

	/**
	 * 构造
	 * 
	 * @param queue    队列
	 * @param callback 回调
	 * @param time     时间 毫秒
	 */
	public AsynQueue(Queue queue, CallbackVoid callback, long time) {
		this.queue = queue;
		// 定时任务
		ScheduledUtil.delay(() -> {
			int n = 0;
			long c = System.currentTimeMillis();
			// 队列不为空
			while (U.E.isNotEmpty(queue)) {
				E e = queue.poll();
				callback.callback(e);
				n++;
				LOG.debug("AsynQueue run i={} obj={}", n, e);
			}
			LOG.info("AsynQueue run size={} time={}", n, System.currentTimeMillis() - c);
		}, time);
	}

	/**
	 * 构造
	 * 
	 * @param queue    队列
	 * @param callback 回调
	 * @param time     时间 秒
	 */
	public AsynQueue(Queue queue, CallbackVoid callback, int time) {
		this(queue, callback, MathUtil.multiply(time, 1000).longValue());
	}

	/**
	 * 添加元素到队列
	 * 
	 * @param  e
	 * @return   是否成功
	 */
	public boolean add(E e) {
		return queue.add(e);
	}

	/**
	 * 添加列表到队列
	 * 
	 * @param  c 列表
	 * @return   是否成功
	 */
	public boolean addAll(Collection c) {
		return queue.addAll(c);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy