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
原创粉丝点击