**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);*/
}
}
已测试。