- package com.ypp.thread;
- import java.math.BigDecimal;
- import java.util.Calendar;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- import java.util.concurrent.BlockingQueue;
- import java.util.concurrent.LinkedBlockingQueue;
- import org.apache.commons.lang.StringUtils;
- import org.apache.log4j.Logger;
- import org.joda.time.LocalDateTime;
- import com.alibaba.fastjson.JSONObject;
- import com.ypp.constants.Constants;
- import com.ypp.mapper.UserMapper;
- import com.ypp.model.User;
- import com.ypp.model.UserAlis;
- import com.ypp.model.UserBaseModel;
- import com.ypp.model.UserVip;
- import com.ypp.util.HashRedisUtil;
- import com.ypp.util.JsonUtils;
- import com.ypp.util.PHPSerializer;
- public class ProducerConsumer {
- private staticLogger logger = Logger.getLogger(ProducerConsumer.class);
- //这个page 是核心, 全局变量, 当生产者生产一次 ,获取200 个用户, 会把这个page++, 下次获取就是后一个200 条用户了
- private staticInteger page = 0;
- //消费者
- public classConsumerimplements Runnable {
- private HashRedisUtil redisUtil;
- private UserMapper userMapper;
- privateStorage s =null;
- public Consumer(HashRedisUtil redisUtil, UserMapper userMapper, Storage s) {
- super();
- this.redisUtil = redisUtil;
- this.userMapper = userMapper;
- this.s = s;
- }
- public void run() {
- try {
- while(true) {
- User users = s.pop();
- longbbb = System.currentTimeMillis();
- // 获取一个用户的粉丝列表 并存到redis
- try {
- fansUpdate(users.getToken(), users.getUserId(), redisUtil);
- } catch (Exception e1) {
- e1.printStackTrace();
- }
- // 获取一个用户的关注列表, 并存到redis
- try {
- followUpdate(users.getToken(), users.getUserId(), redisUtil);
- } catch (Exception e) {
- e.printStackTrace();
- }
- // 获取一个用户的黑名单, 并存到redis
- try {
- blackUpdate(users.getToken(), users.getUserId(), redisUtil);
- } catch (Exception e) {
- e.printStackTrace();
- }
- // 用户基本信息
- try {
- userbaseUpdate(users.getToken(), users.getUserId(), redisUtil);
- } catch (Exception e) {
- e.printStackTrace();
- }
- longccc = System.currentTimeMillis();
- System.out.println("用户:" + users.getToken() + " 全部总共耗时:" + (ccc - bbb) + "毫秒");
- Thread.sleep(500);
- }
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- publicList getUserInfo(Integer iThread) {
- returnuserMapper.findUserInfo((iThread - 1) * 200 + 1);
- }
- /**
- * 用户基本信息修改
- *
- * @param token
- * @param myuserId
- * @param redisUtil
- * @throws Exception
- */
- private voiduserbaseUpdate(String token, String myUserId, HashRedisUtil redisUtil)throws Exception {
- }
- /**
- * 更新一个用户的黑名单(原来的token改成userID)
- *
- * @param token
- * @param string
- * @param redisUtil
- * @throws Exception
- */
- private voidblackUpdate(String token, String myUserId, HashRedisUtil redisUtil)throws Exception {
- }
- /**
- * 获取一个用户的关注
- *
- * @param token
- * @param string
- * @param redisUtil
- * @throws Exception
- */
- private voidfollowUpdate(String token, String myUserId, HashRedisUtil redisUtil)throws Exception {
- }
- /**
- * 获取一个用户的粉丝列表
- *
- * @param token
- * @param userId
- * @param redisUtil
- * @throws Exception
- */
- private voidfansUpdate(String token, String myUserId, HashRedisUtil redisUtil)throws Exception {
- }
- //生产者
- public classProducerimplements Runnable {
- privateStorage s =null;
- private UserMapper mapper ;
- public Producer( Storage s, UserMapper mapper) {
- this.s = s;
- this.mapper = mapper;
- }
- public void run() {
- try {
- while(true) {
- System.err.println("当前分页是:"+page+"****************************************");
- List list= mapper.findUserInfo(page);
- s.push(list);
- page++;
- }
- } catch (InterruptedException e1) {
- e1.printStackTrace();
- }
- }
- }
- //数据仓库
- public class Storage {
- BlockingQueue queues = newLinkedBlockingQueue(200);
- /**
- * 生产
- *
- * @param p
- * 产品
- * @throws InterruptedException
- */
- public voidpush(List p) throws InterruptedException {
- for(User user:p){
- queues.put(user);
- }
- }
- /**
- * 消费
- *
- * @return 产品
- * @throws InterruptedException
- */
- publicUser pop()throws InterruptedException {
- return queues.take();
- }
- }
- }
来源: http://www.bubuko.com/infodetail-1991893.html