Java通过缓存队列执行任务代码实现
来源:互联网 发布:java反射的应用 编辑:程序博客网 时间:2024/05/18 22:43
**Java通过缓存队列执行任务代码实现**
创建缓存队列
package cn.com.job;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.LinkedBlockingQueue;
import cn.com.domain.User;
public class UserCacheUtil {
private static UserCacheUtil userCacheUtil = null;private static Map<String,LinkedBlockingQueue<User>> userCacheMap = new HashMap<String,LinkedBlockingQueue<User>>();private UserCacheUtil(){}public synchronized static UserCacheUtil getInstance(){ if(userCacheUtil==null){ userCacheUtil = new UserCacheUtil(); } return userCacheUtil;}public void addCache(String userId,User user){ LinkedBlockingQueue<User> linkList = userCacheMap.get(userId); if(linkList==null){ linkList = new LinkedBlockingQueue<User>(); linkList.offer(user); userCacheMap.put(userId, linkList); System.out.println(userId+"加入队列---------------------"); TreadPoolUtis.getInstance().execute(userId); }else{ linkList.offer(user); }}public User getNextElement(String userId){ LinkedBlockingQueue<User> linkList = userCacheMap.get(userId); User user = null; if(linkList!=null){ user = linkList.poll(); } if(user==null){ System.out.println("清空缓存队列"); userCacheMap.put(userId, null); } return user;}
}
创建线程池
package cn.com.job;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import cn.com.domain.User;
public class TreadPoolUtis{
private static TreadPoolUtis treadPoolUtis = null;private ExecutorService executer;private final static int MAX=10;private TreadPoolUtis(){ executer = Executors.newFixedThreadPool(MAX);}public synchronized static TreadPoolUtis getInstance(){ if(treadPoolUtis == null){ treadPoolUtis = new TreadPoolUtis(); } return treadPoolUtis;}public void execute(final String userId){ executer.execute(new Runnable() { @Override public void run() { User user = UserCacheUtil.getInstance().getNextElement(userId); while(user!=null){ for(int i=0;i<1;i++){ System.out.println(user.getUserName()+"执行!"+i); } user = UserCacheUtil.getInstance().getNextElement(userId); } } });}
}
测试类
package cn.com.test;
import cn.com.domain.User;
import cn.com.job.UserCacheUtil;
public class TestUserCache {
public static void main(String[] args) { User user = new User(); user.setUserName("潘博"); user.setUserId(1001); user.setAddress("河南省鹿邑县!!!"); UserCacheUtil.getInstance().addCache("1001", user); UserCacheUtil.getInstance().addCache("1001", user); /*User user2 = new User(); user2.setUserName("潘博2"); user2.setUserId(1002); user2.setAddress("河南省鹿邑县2222!!!"); User user3 = new User(); user3.setUserName("潘博3"); user3.setUserId(1003); user3.setAddress("河南省鹿邑县3333!!!"); User user4 = new User(); user4.setUserName("潘博4"); user4.setUserId(1004); user4.setAddress("河南省鹿邑县4444!!!"); UserCacheUtil.getInstance().addCache("1002", user2); UserCacheUtil.getInstance().addCache("1003", user3); UserCacheUtil.getInstance().addCache("1004", user4);*/}
}
已测试。
1 0
- Java通过缓存队列执行任务代码实现
- java代码实现定时执行任务
- Java通过DelayQueue的实现多线程任务的阻塞队列
- 通过java定时器执行任务
- 通过java代码实现dos环境下多条命令的执行
- Spring MVC 通过session 创建执行任务队列
- Java通过python命令执行DataX任务
- C#任务队列的实现代码
- 任务队列执行结构
- Android Executor 如何实现任务Runnable队列顺序执行
- Nop-通过IStartupTask实现代码执行<六>
- Nop-通过IStartupTask实现代码执行<六>
- Java—实现每天定时执行任务
- 通过bat或shell执行java代码
- 通过Java代码执行shell命令/脚本
- 【JAVA】通过注解实现定时任务
- java通过缓存实现同步锁
- Java通过两个栈实现队列
- 观察者模式
- 《Docker——容器与容器云》:第五章 构建自己的容器云
- MySQL半同步复制
- CSU 1657 Ways(bfs)
- POJ 2888 Magic Bracelet
- Java通过缓存队列执行任务代码实现
- MFC对话框程序加载菜单、加速键、工具栏
- ES6 for...of循环
- hdu 1706 An Easy Task
- How to add a logo into the gerber file?
- 《玩不够的数学:算术与几何的妙趣》:第一章 平面上的几何艺术
- bzoj1227(排列组合+树状数组)
- C/C++笔试题
- 201. Bitwise AND of Numbers Range【M】【80】【leetcode】