`
lyhngu
  • 浏览: 1479 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

小工具类

 
阅读更多

import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.FutureTask;

import org.springframework.util.Assert;

/******************************
 * 创建日期: 2013-9-1 上午9:24:59
 * 创建作者:yh.li (yh.li@X.com)
 * 类名称 :ConcurentFutureTaskUtil.java
 * 版  本:
 * 功  能:
 * 最后修改:
 * 修改记录:
*****************************************/
public class ConcurrentFutureTaskUtil {

	private static final int MODULE_SIZE = 10;
	@SuppressWarnings("unchecked")
	private static final ConcurrentMap<String, FutureTask<?>>[] MAPS = new ConcurrentHashMap[MODULE_SIZE];
	static {
		for (int i = 0; i < MODULE_SIZE; i++) {
			MAPS[i] = new ConcurrentHashMap<String, FutureTask<?>>();
		}
	}

	public static <V> V submitTaskAndGetResult(String key, Callable<V> callable) {
                Assert.notNull(key, "submitTaskAndGetResult() param key cann't be null");
		Assert.notNull(futureTask, "submitTaskAndGetResult() param callable cann't be null");
		return submitTaskAndGetResult(key, new FutureTask<V>(callable));
	}

	@SuppressWarnings("unchecked")
	private static <V> V submitTaskAndGetResult(String key, FutureTask<V> futureTask) {		
		ConcurrentHashMap<String, FutureTask<?>> concurrentHashMap = getConcurrentMap(key);
		try {
			FutureTask<?> f = concurrentHashMap.putIfAbsent(key, futureTask);
			if (f == null) {
				f = futureTask;
				f.run();
			}
			V result = null;
			try {
				result = (V) f.get();
			} catch (Exception e) {
				throw new RuntimeException(e.getCause());
			}
			return result;
		} finally {
			concurrentHashMap.remove(key);
		}

	}

	private static ConcurrentHashMap<String, FutureTask<?>> getConcurrentMap(String key) {
		long hashCode = (long) key.hashCode();

		hashCode = Math.abs(hashCode);

		int moudleNum = (int) hashCode % MODULE_SIZE;

		return (ConcurrentHashMap<String, FutureTask<?>>) MAPS[moudleNum];
	}

}

import java.util.Calendar;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.TimeUnit;

import com.xx.xx.cache.memcache.MemcachedCache;


/******************************
 * 版权所有:xx 所有权利
 * 创建日期: 2013-11-23 下午12:25:11
 * 创建作者:xx
 * 类名称 :ScheduledTaskUtil.java
 * 版  本:
 * 功  能:
 * 最后修改:
 * 修改记录:
*****************************************/
public class ScheduledTaskUtil {
	static Random random = new Random();
	/**
	 * 该方法用于在分布式环境中,定时任务执行,每个任务只执行一次
	 * @param cache	memcached实现
	 * @param timeCacheKey	时间缓存key
	 * @param runnable	任务
	 * @param delay	任务执行间隔
	 * @param timeUnit 时间单位
	 */
	public static void schedule(MemcachedCache cache, String timeCacheKey, Runnable runnable, int delay,
			TimeUnit timeUnit) {
		Date now = new Date();
		int second = (int) timeUnit.toSeconds(delay);
		
		java.util.Calendar calendar = java.util.Calendar.getInstance();
		calendar.setTime(now);
		calendar.add(Calendar.SECOND, second);
		
		if (cache.add(timeCacheKey, calendar.getTime(), second)) {
			sleep();
			runnable.run();
		}else{
			Date latestDate = (Date) cache.get(timeCacheKey);
			if (latestDate != null) {
				if (latestDate.before(now)) {
					//可能会重复
					cache.put(timeCacheKey, calendar.getTime(), second);
					sleep();
					runnable.run();
				}
			}
		}
	}
	private static void sleep(){
		try {
			TimeUnit.SECONDS.sleep(random.nextInt(30));
		} catch (InterruptedException e) {
			Thread.currentThread().interrupt();
		}
	}
}


import java.util.concurrent.TimeUnit;

import com.xx.xx.cache.memcache.MemcachedCache;


/******************************
 * 版权所有:xx
 * 创建日期: 2013-12-9 下午7:40:16
 * 创建作者:xx
 * 类名称 :MemcacheLock.java
 * 版  本:
 * 功  能:
 * 最后修改:
 * 修改记录:
*****************************************/
public class SimpleMemcacheLock {

	public static boolean lock(MemcachedCache cache, String lockKey, long lockTime, TimeUnit timeUnit) {
		int secend = (int) timeUnit.toSeconds(lockTime);
		if (secend <= 0)
			throw new IllegalArgumentException("lockTime must be greeter than 0");
		boolean hasLocked = false;
		while (!hasLocked) {
			hasLocked = cache.add(lockKey, "1", secend);
			if (hasLocked) {
				break;
			} else {
				try {
					TimeUnit.MILLISECONDS.sleep(10);
				} catch (InterruptedException e) {
					Thread.currentThread().interrupt();
					break;
				}
			}
		}
		return hasLocked;
	}

	public static void unLock(MemcachedCache cache, String lockKey) {
		cache.remove(lockKey);
	}

	public static boolean tryLock(MemcachedCache cache, String lockKey, long lockTime, TimeUnit timeUnit) {
		int secend = (int) timeUnit.toSeconds(lockTime);
		if (secend <= 0)
			throw new IllegalArgumentException("lockTime must be greeter than 0");
		return cache.add(lockKey, "1", secend);
	}

}

分享到:
评论

相关推荐

    小程序源码 小工具类(带后台)

    小程序源码 小工具类(带后台)小程序源码 小工具类(带后台)小程序源码 小工具类(带后台)小程序源码 小工具类(带后台)小程序源码 小工具类(带后台)小程序源码 小工具类(带后台)小程序源码 小工具类(带...

    微信小程序 小工具类 搜索框 (源代码+截图)

    微信小程序 小工具类 搜索框 (源代码+截图)微信小程序 小工具类 搜索框 (源代码+截图)微信小程序 小工具类 搜索框 (源代码+截图)微信小程序 小工具类 搜索框 (源代码+截图)微信小程序 小工具类 搜索框 (源...

    微信小程序 小工具类 金融理财计算器 (源代码+截图)

    微信小程序 小工具类 金融理财计算器 (源代码+截图)微信小程序 小工具类 金融理财计算器 (源代码+截图)微信小程序 小工具类 金融理财计算器 (源代码+截图)微信小程序 小工具类 金融理财计算器 (源代码+截图)...

    微信小程序 小工具类 倒班日历 (源代码+截图)

    微信小程序 小工具类 倒班日历 (源代码+截图)微信小程序 小工具类 倒班日历 (源代码+截图)微信小程序 小工具类 倒班日历 (源代码+截图)微信小程序 小工具类 倒班日历 (源代码+截图)微信小程序 小工具类 倒班...

    微信小程序 小工具类 备忘录 (源代码+截图)

    微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源...

    微信小程序 小工具类 番茄时钟 (源代码+截图)

    微信小程序 小工具类 番茄时钟 (源代码+截图)微信小程序 小工具类 番茄时钟 (源代码+截图)微信小程序 小工具类 番茄时钟 (源代码+截图)微信小程序 小工具类 番茄时钟 (源代码+截图)微信小程序 小工具类 番茄...

    微信小程序 小工具类 图表 (源代码+截图)

    微信小程序 小工具类 图表 (源代码+截图)微信小程序 小工具类 图表 (源代码+截图)微信小程序 小工具类 图表 (源代码+截图)微信小程序 小工具类 图表 (源代码+截图)微信小程序 小工具类 图表 (源代码+截图)...

    微信小程序 小工具类 蝌蚪签到 (源代码+截图)

    微信小程序 小工具类 蝌蚪签到 (源代码+截图)微信小程序 小工具类 蝌蚪签到 (源代码+截图)微信小程序 小工具类 蝌蚪签到 (源代码+截图)微信小程序 小工具类 蝌蚪签到 (源代码+截图)微信小程序 小工具类 蝌蚪...

    微信小程序 小工具类 iOS计算器 (源代码+截图)

    微信小程序 小工具类 iOS计算器 (源代码+截图)微信小程序 小工具类 iOS计算器 (源代码+截图)微信小程序 小工具类 iOS计算器 (源代码+截图)微信小程序 小工具类 iOS计算器 (源代码+截图)微信小程序 小工具类 ...

    微信小程序 小工具类 二维码生成器 (源代码+截图)

    微信小程序 小工具类 二维码生成器 (源代码+截图)微信小程序 小工具类 二维码生成器 (源代码+截图)微信小程序 小工具类 二维码生成器 (源代码+截图)微信小程序 小工具类 二维码生成器 (源代码+截图)微信小...

    微信小程序 小工具类 步步高字典 (源代码+截图)

    微信小程序 小工具类 步步高字典 (源代码+截图)微信小程序 小工具类 步步高字典 (源代码+截图)微信小程序 小工具类 步步高字典 (源代码+截图)微信小程序 小工具类 步步高字典 (源代码+截图)微信小程序 小...

    微信小程序 小工具类 查拼音 (源代码+截图)

    微信小程序 小工具类 查拼音 (源代码+截图)微信小程序 小工具类 查拼音 (源代码+截图)微信小程序 小工具类 查拼音 (源代码+截图)微信小程序 小工具类 查拼音 (源代码+截图)微信小程序 小工具类 查拼音 (源...

    微信小程序 小工具类 画布:时钟 (源代码+截图)

    微信小程序 小工具类 画布:时钟 (源代码+截图)微信小程序 小工具类 画布:时钟 (源代码+截图)微信小程序 小工具类 画布:时钟 (源代码+截图)微信小程序 小工具类 画布:时钟 (源代码+截图)微信小程序 小...

    微信小程序——[小工具类]XCX-scaffold-master(截图+源码).zip

    微信小程序——[小工具类]XCX-scaffold-master(截图+源码).zip 微信小程序——[小工具类]XCX-scaffold-master(截图+源码).zip 微信小程序——[小工具类]XCX-scaffold-master(截图+源码).zip 微信小程序——[小...

    微信小程序——[小工具类]iOS计算器(截图+源码).zip

    微信小程序——[小工具类]iOS计算器(截图+源码).zip 微信小程序——[小工具类]iOS计算器(截图+源码).zip 微信小程序——[小工具类]iOS计算器(截图+源码).zip 微信小程序——[小工具类]iOS计算器(截图+源码)....

    Qt&C++若干小工具类请自行取用

    - 非模态计时器窗口,使用QTime类对象currentTime与toString函数 - 模拟传送文件 - 使用QThread,在进度条对话框类中以成员变量的形式分发任务 `TransferTask* m_task;`,并在进度条对话框初始化函数中启用工作...

    微信小程序设计(含源代码+解释文档)之小工具类.zip

    小工具类通常指的是小程序中的一些功能模块,例如日期时间选择器、图片裁剪器、计算器等,这些工具类可以帮助开发者快速构建功能丰富的界面和交互。 在“资料整理”中,你可能会看到以下内容: 1. **API文档**:...

    tojson小工具类

    toJson.cs小工具类,在开发中常遇到要转换为json字符串的,easyui等中用的更多

    微信小程序——[小工具类]鱼缸表盘系统小程序(截图+源码).zip

    微信小程序——[小工具类]鱼缸表盘系统小程序(截图+源码).zip 微信小程序——[小工具类]鱼缸表盘系统小程序(截图+源码).zip 微信小程序——[小工具类]鱼缸表盘系统小程序(截图+源码).zip

    小程序&小工具类&粤语小词典(源码+截图+源码导入教程和视频).zip

    小程序&小工具类&粤语小词典(源码+截图+源码导入教程和视频).zip

Global site tag (gtag.js) - Google Analytics