zzg8696256 2014-07-28 06:56 采纳率: 0%
浏览 853

如何写线程类的测试类?

package com.tywire.tadu.cache.queue;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;

import com.tywire.tadu.cache.key.FavoriteCache;
import com.tywire.tadu.cache.queue.opt.FavoriteOpt;
import com.tywire.tadu.cache.refresh.FavoriteRefresh;
import com.tywire.tadu.facade.FavoriteFacade;
import com.tywire.tadu.pojo.Favorite;
import com.tywire.tadu.redis.JedisHelper;
import com.tywire.tadu.utils.init.AppContext;
import com.tywire.tadu.utils.service.LogHelper;
import com.tywire.tadu.utils.thread.ThreadPoolManager;

/**

  • 收藏清缓存
    */
    public class FavoriteQ {

    private static FavoriteFacade favoriteFacade = (FavoriteFacade) AppContext.getInstance().getAppContext()
    .getBean("favoriteFacade");
    private static FavoriteRefresh favoriteRefresh = (FavoriteRefresh) AppContext.getInstance().getAppContext()
    .getBean("favoriteRefresh");

    private FavoriteQ() {
    }

    public static BlockingQueue q = new LinkedBlockingDeque();

    static {

    new Thread(new Queuelis()).start();
    

    }

    private static class Queuelis implements Runnable {

    /**
     * 添加收藏清缓存
     * @param opt FavoriteOpt类信息
     */
    private void add(FavoriteOpt opt) {
        // 1、增加单条进入缓存
        String cachekey = FavoriteCache.loadUserFavoritesKey(opt.getFavorite().getUserId());
        boolean cacheExist = JedisHelper.exists(cachekey);
        if (cacheExist) {
            JedisHelper.zadd(FavoriteCache.loadUserFavoritesKey(opt.getFavorite().getUserId()), opt.getFavorite()
                    .getTimeScore(), opt.getFavorite());
        }
        //else {// 如果缓存不存在,不做处理
        //  loadUserFavorites(favorite.getUserId());
        //}
    
        // 2、修改个数
        favoriteRefresh.refreshUserFavoriteSize(opt.getFavorite().getUserId());
    }
    
    /**
     * 更新收藏信息清缓存
     * @param opt 收藏信息
     */
    private void update(FavoriteOpt opt) {
        // 1、覆盖单条进入缓存
        String cachekey = FavoriteCache.loadUserFavoritesKey(opt.getFavorite().getUserId());
        boolean cacheExist = JedisHelper.exists(cachekey);
        if (cacheExist) {
            JedisHelper.zadd(FavoriteCache.loadUserFavoritesKey(opt.getFavorite().getUserId()), opt.getFavorite()
                    .getTimeScore(), opt.getFavorite());
        }
        //else {// 如果缓存不存在,不做处理
        //  loadUserFavorites(favorite.getUserId());
        //}
        // 修改单条,缓存改为
        // FavoriteRefresh.refreshGetFavoriteByUserAndBook(favorite.getUserId(), favorite.getBookId());
        favoriteRefresh.refreshFavoriteById(opt.getFavorite().getId());
    }
    
    /**
     * 加载用户收藏信息<br>系统调用
     * @param opt
     */
    private void load(FavoriteOpt opt) {
        favoriteRefresh.refreshUserFavorites(opt.getFavorite().getUserId());
    }
    
    /**
     * 删除收藏夹中的缓存信息
     * @param opt
     */
    private void deleteFavoritesByFolderId(FavoriteOpt opt) {
        /* 1、处理收藏夹中,收藏的缓存 */
        // 修改个数
        favoriteRefresh.refreshUserFavoriteSize(opt.getFavorite().getUserId());
        // 重新加载用户收藏数
        favoriteFacade.loadUserFavorites(opt.getFavorite().getUserId());
    }
    
    /**
     * 批量删除收藏信息 
     * @param opt 收藏信息
     */
    private void deleteFavoriteByIds(FavoriteOpt opt) {
        if (opt.getList() == null) {
            return;
        }
        // 如果列表缓存存在删除缓存
        String cachekey = FavoriteCache.loadUserFavoritesKey(opt.getFavorite().getUserId());
        boolean cacheExist = JedisHelper.exists(cachekey);
        if (cacheExist) {
            for (Favorite fav : opt.getList()) {
                JedisHelper.zrem(FavoriteCache.loadUserFavoritesKey(opt.getFavorite().getUserId()), fav);
                JedisHelper.del(FavoriteCache.getFavoriteByIdKey(fav.getId()));
            }
        }
        // 加载个数
        favoriteRefresh.refreshUserFavoriteSize(opt.getFavorite().getUserId());
    }
    
    private void deleteFavoriteByUserId(FavoriteOpt opt) {
        // 删除缓存
        JedisHelper.del(FavoriteCache.loadUserFavoritesKey(opt.getFavorite().getUserId()));
        // 修改个数
        JedisHelper.del(FavoriteCache.countUserFavoritesKey(opt.getFavorite().getUserId()));
        // 单条的不作出处理,等待其自动过期
    }
    
    /**
     * 执行所有缓存操作
     */
    @Override
    public void run() {
        for (;;) {
    
            try {
                final FavoriteOpt opt = q.take();
                ThreadPoolManager.es.execute(new Runnable() { // 执行所有缓存操作
                            @Override
                            public void run() {
                                if (opt.getOpt().equalsIgnoreCase("add")) { // 增加
                                    add(opt);
                                } else if (opt.getOpt().equalsIgnoreCase("update")) { // 修改
                                    update(opt);
                                } else if (opt.getOpt().equalsIgnoreCase("deleteFavoritesByFolderId")) { // 删除
                                    deleteFavoritesByFolderId(opt);
                                } else if (opt.getOpt().equalsIgnoreCase("deleteFavoriteByIds")) { // 删除
                                    deleteFavoriteByIds(opt);
                                } else if (opt.getOpt().equalsIgnoreCase("deleteFavoriteByUserId")) { // 删除
                                    deleteFavoriteByUserId(opt);
                                } else if (opt.getOpt().equalsIgnoreCase("load")) { // 加载
                                    load(opt);
                                }
    
                            }
                        });
            } catch (InterruptedException e) {
                LogHelper.exceptionLog(e);
            }
    
        }
    }
    

    }

}

  • 写回答

1条回答

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-25 19:32
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler