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计算器 (源代码+截图)微信小程序 小工具类 ...
微信小程序 小工具类 二维码生成器 (源代码+截图)微信小程序 小工具类 二维码生成器 (源代码+截图)微信小程序 小工具类 二维码生成器 (源代码+截图)微信小程序 小工具类 二维码生成器 (源代码+截图)微信小...
微信小程序 小工具类 步步高字典 (源代码+截图)微信小程序 小工具类 步步高字典 (源代码+截图)微信小程序 小工具类 步步高字典 (源代码+截图)微信小程序 小工具类 步步高字典 (源代码+截图)微信小程序 小...
微信小程序 小工具类 查拼音 (源代码+截图)微信小程序 小工具类 查拼音 (源代码+截图)微信小程序 小工具类 查拼音 (源代码+截图)微信小程序 小工具类 查拼音 (源代码+截图)微信小程序 小工具类 查拼音 (源...
微信小程序 小工具类 画布:时钟 (源代码+截图)微信小程序 小工具类 画布:时钟 (源代码+截图)微信小程序 小工具类 画布:时钟 (源代码+截图)微信小程序 小工具类 画布:时钟 (源代码+截图)微信小程序 小...
微信小程序——[小工具类]XCX-scaffold-master(截图+源码).zip 微信小程序——[小工具类]XCX-scaffold-master(截图+源码).zip 微信小程序——[小工具类]XCX-scaffold-master(截图+源码).zip 微信小程序——[小...
微信小程序——[小工具类]iOS计算器(截图+源码).zip 微信小程序——[小工具类]iOS计算器(截图+源码).zip 微信小程序——[小工具类]iOS计算器(截图+源码).zip 微信小程序——[小工具类]iOS计算器(截图+源码)....
- 非模态计时器窗口,使用QTime类对象currentTime与toString函数 - 模拟传送文件 - 使用QThread,在进度条对话框类中以成员变量的形式分发任务 `TransferTask* m_task;`,并在进度条对话框初始化函数中启用工作...
小工具类通常指的是小程序中的一些功能模块,例如日期时间选择器、图片裁剪器、计算器等,这些工具类可以帮助开发者快速构建功能丰富的界面和交互。 在“资料整理”中,你可能会看到以下内容: 1. **API文档**:...
toJson.cs小工具类,在开发中常遇到要转换为json字符串的,easyui等中用的更多
微信小程序——[小工具类]鱼缸表盘系统小程序(截图+源码).zip 微信小程序——[小工具类]鱼缸表盘系统小程序(截图+源码).zip 微信小程序——[小工具类]鱼缸表盘系统小程序(截图+源码).zip
小程序&小工具类&粤语小词典(源码+截图+源码导入教程和视频).zip