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

com.weicoder.common.concurrent.ScheduledUtil Maven / Gradle / Ivy

package com.weicoder.common.concurrent;

import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

import com.weicoder.common.constants.DateConstants;
import com.weicoder.common.constants.StringConstants;
import com.weicoder.common.log.Logs;

/**
 * 定时任务工具类
 * @author WD
 */
public final class ScheduledUtil {
	// 定时线程工厂
	private final static ScheduledFactory FACTORY = new ScheduledFactory();
	// // 并发定时任务池
	// private final static ScheduledExecutorService POOL = newPool(SystemConstants.CPU_NUM * 2, false);
	// // 守护线程并发定时任务池
	// private final static ScheduledExecutorService DAEMON_POOL = newPool(SystemConstants.CPU_NUM * 2, true);

	// /**
	// * 获得新的线程任务池
	// * @param size 池数量
	// * @param daemon 是否守护线程
	// * @return 线程任务池
	// */
	// public static ScheduledExecutorService newPool(int size, boolean daemon) {
	// // return daemon ? Executors.newScheduledThreadPool(size, DaemonThreadFactory.INSTANCE)
	// // : Executors.newScheduledThreadPool(size);
	// return FACTORY.newPool(size, daemon);
	// }

	/**
	 * 获得定时任务池 此方法返回守护线程的池
	 * @return 定时任务池
	 */
	public static ScheduledExecutorService pool() {
		// return pool(true);
		return pool(StringConstants.EMPTY);
	}

	/**
	 * 获得定时任务池 此方法返回守护线程的池
	 * @param name 名称
	 * @return 定时任务池
	 */
	public static ScheduledExecutorService pool(String name) {
		return FACTORY.getInstance(name);
	}

	// /**
	// * 获得定时任务池
	// * @param daemon 是否守护线程
	// * @return 定时任务池
	// */
	// public static ScheduledExecutorService pool(boolean daemon) {
	// return daemon ? DAEMON_POOL : POOL;
	// }

	/**
	 * 执行定时任务 按初始时间间隔
	 * @param command 线程任务
	 * @param period 间隔时间 毫秒
	 * @return ScheduledFuture
	 */
	public static ScheduledFuture rate(Runnable command, long period) {
		return rate(command, 0, period, TimeUnit.MILLISECONDS);
	}

	/**
	 * 执行定时任务 按初始时间间隔
	 * @param command 线程任务
	 * @param period 间隔时间 秒
	 * @return ScheduledFuture
	 */
	public static ScheduledFuture rate(Runnable command, int period) {
		return rate(command, period * DateConstants.TIME_SECOND);
	}

	/**
	 * 执行定时任务 按初始时间间隔
	 * @param command 线程任务
	 * @param initialDelay 初始化时间
	 * @param period 间隔时间
	 * @param unit 时间戳
	 * @return ScheduledFuture
	 */
	public static ScheduledFuture rate(Runnable command, long initialDelay, long period, TimeUnit unit) {
		return rate(StringConstants.EMPTY, command, initialDelay, period, unit);
	}

	/**
	 * 执行定时任务 按初始时间间隔
	 * @param name 名称
	 * @param command 线程任务
	 * @param period 间隔时间 毫秒
	 * @return ScheduledFuture
	 */
	public static ScheduledFuture rate(String name, Runnable command, long period) {
		return rate(name, command, period, period, TimeUnit.MILLISECONDS);
	}

	/**
	 * 执行定时任务 按初始时间间隔
	 * @param name 名称
	 * @param command 线程任务
	 * @param period 间隔时间 秒
	 * @return ScheduledFuture
	 */
	public static ScheduledFuture rate(String name, Runnable command, int period) {
		return rate(name, command, period * DateConstants.TIME_SECOND);
	}

	/**
	 * 执行定时任务 按初始时间间隔
	 * @param name 名称
	 * @param command 线程任务
	 * @param initialDelay 初始化时间
	 * @param period 间隔时间
	 * @param unit 时间戳
	 * @return ScheduledFuture
	 */
	public static ScheduledFuture rate(String name, Runnable command, long initialDelay, long period,
			TimeUnit unit) {
		Logs.debug("ScheduledUtile rate name={} command={},initialDelay={},period={},unit={}", name, command,
				initialDelay, period, unit);
		return pool(name).scheduleAtFixedRate(command, initialDelay, period, unit);
	}

	/**
	 * 执行定时任务 按执行线程时间间隔
	 * @param command 线程任务
	 * @param delay 间隔时间 毫秒
	 * @return ScheduledFuture
	 */
	public static ScheduledFuture delay(Runnable command, long delay) {
		return delay(command, 0, delay, TimeUnit.MILLISECONDS);
	}

	/**
	 * 执行定时任务 按执行线程间隔
	 * @param command 线程任务
	 * @param delay 间隔时间 秒
	 * @return ScheduledFuture
	 */
	public static ScheduledFuture delay(Runnable command, int delay) {
		return delay(command, delay * DateConstants.TIME_SECOND);
	}

	/**
	 * 执行定时任务 按执行线程时间间隔
	 * @param command 线程任务
	 * @param initialDelay 初始化时间
	 * @param delay 间隔时间
	 * @param unit 时间戳
	 * @return ScheduledFuture
	 */
	public static ScheduledFuture delay(Runnable command, long initialDelay, long delay, TimeUnit unit) {
		return delay(StringConstants.EMPTY, command, initialDelay, delay, unit);
	}

	/**
	 * 执行定时任务 按执行线程时间间隔
	 * @param name 名称
	 * @param command 线程任务
	 * @param delay 间隔时间 毫秒
	 * @return ScheduledFuture
	 */
	public static ScheduledFuture delay(String name, Runnable command, long delay) {
		return delay(name, command, 0, delay, TimeUnit.MILLISECONDS);
	}

	/**
	 * 执行定时任务 按执行线程间隔
	 * @param name 名称
	 * @param command 线程任务
	 * @param delay 间隔时间 秒
	 * @return ScheduledFuture
	 */
	public static ScheduledFuture delay(String name, Runnable command, int delay) {
		return delay(name, command, delay * DateConstants.TIME_SECOND);
	}

	/**
	 * 执行定时任务 按执行线程时间间隔
	 * @param name 名称
	 * @param command 线程任务
	 * @param initialDelay 初始化时间
	 * @param delay 间隔时间
	 * @param unit 时间戳
	 * @return ScheduledFuture
	 */
	public static ScheduledFuture delay(String name, Runnable command, long initialDelay, long delay,
			TimeUnit unit) {
		Logs.debug("ScheduledUtile rate name={} command={},initialDelay={},delay={},unit={}", name, command,
				initialDelay, delay, unit);
		return pool(name).scheduleWithFixedDelay(command, initialDelay, delay, unit);
	}

	private ScheduledUtil() {}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy