• java 单例模式+ Executors.newScheduledThreadPool线程池实现定时更新公用部分缓存数据


    实现这个功能为什么会带上单例模式, 单例用在这类功能实现,能降低内存消耗,所有涉及到的参数只需要申明一次。

     public static  AAAAYulebaoShareSingleton getInstance(){     
         
          if(instance == null){  
            
               
                instance = new AAAAYulebaoShareSingleton(); 
           
                instance.infoFirstPageJSONObject=new JSONObject();
            
                
                
                instance.shareJSONArray=new JSONArray();
                 //资源首页数据
                instance.resourceFirstPageJSONObject=new JSONObject();
                //渠道首页数据
                instance.qudaoFirstPageJSONObject=new JSONObject();
                instance.memberPriceSheetJSONArray=new JSONArray();
              
              
                instance.userTokenObject=new JSONObject();
                
                instance.alipayOnlineBuyDictionary=new JSONObject();
                
                
                   instance.EchoServer=new EchoServer();
            //间隔1分钟更新一次公用缓存执行
                  instance. executor = Executors.newScheduledThreadPool(1);
                  instance.executor.scheduleAtFixedRate(
                   instance.EchoServer,
                    0,
                   60000,
                   TimeUnit.MILLISECONDS); 
                       
                       
                   //下面两个参数作用是对比判断是否当前是第二天,因为有隔天更新的数据
                  instance. secondDayUpdateData=DateFormatUtils.format(new Date(), "yyyy-MM-dd");
                  instance.secondDayUpdateDataTemp=instance. secondDayUpdateData;
                   
                     
                     
                     
                     
                   
                 return instance;   
            }
            else
             {
                return instance;   
            }
                
        }    
    
      
    
      
      public static class EchoServer implements Runnable {
             @Override
            public    void run() {  
                 
                synchronized (EchoServer.class) {
              
                     
                      if( !instance.infoFirstPageJSONObject.isNull("rows"))
                    {
                       instance.mysqlParameter=new String[]{};
                      instance.shareJSONArray=MySqlHepler2.getInstance() .executeQueryT("select count(*)  as  count from publishProductShareInfoSheet",instance.mysqlParameter);
                      instance.resourceFirstPageJSONObject=instance.shareJSONArray.getJSONObject(0);
                      instance.shareInt =instance.resourceFirstPageJSONObject.getInt("count"); 
                      instance.mysqlParameter=new String[]{"已通过","1", "10"};
                      instance.shareJSONArray=new JSONArray();
                      instance.shareJSONArray= MySqlHepler2.getInstance().executeQueryT("SELECT * FROM publishProductShareInfoSheet  where  verifyStatus=? ORDER BY sourceVip DESC, whetherSetTop DESC, id DESC limit ?,?",instance.mysqlParameter);
                      instance.resourceFirstPageJSONObject=new JSONObject();
                      instance.resourceFirstPageJSONObject.put("results", instance.shareInt);
                      instance.resourceFirstPageJSONObject.put("rows",   instance.shareJSONArray); 
                      instance.resourceFirstPageJSONObject.put("status", "success");
                     instance.resourceFirstPageJSONObject.put("msg", "查询成功");
                    
                     
                     instance.mysqlParameter=new String[]{};
                    instance.shareJSONArray=MySqlHepler2.getInstance() .executeQueryT("select count(*)  as  count from qudaoShareSheet",instance.mysqlParameter);
                      instance.qudaoFirstPageJSONObject=instance.shareJSONArray.getJSONObject(0);
                      instance.shareInt =instance.qudaoFirstPageJSONObject.getInt("count"); 
                      instance.mysqlParameter=new String[]{"已通过","1", "10"};
                      instance.shareJSONArray=new JSONArray();
                      instance.shareJSONArray= MySqlHepler2.getInstance().executeQueryT("SELECT * FROM qudaoShareSheet  where verifyStatus=? ORDER BY qudaoVip DESC, whetherSetTop DESC, id DESC limit ?,?",instance.mysqlParameter);
                      instance.qudaoFirstPageJSONObject=new JSONObject();
                      instance.qudaoFirstPageJSONObject.put("results", instance.shareInt);
                      instance.qudaoFirstPageJSONObject.put("rows",   instance.shareJSONArray); 
                      instance.qudaoFirstPageJSONObject.put("status", "success");
                     instance.qudaoFirstPageJSONObject.put("msg", "查询成功");
                     
                     
                  
                        //渠道首页数据
                        instance.mysqlParameter=new String[]{"最新资讯"};
                         instance.shareJSONArray=MySqlHepler2.getInstance() .executeQueryT("select count(*)  as  count from articleSheet where articleType=?",instance.mysqlParameter);
                          
                        
                         instance.infoFirstPageJSONObject=instance.shareJSONArray.getJSONObject(0);
                          instance.shareInt =instance.infoFirstPageJSONObject.getInt("count"); 
                          instance.mysqlParameter=new String[]{"最新资讯","0", "10"};
                          instance.shareJSONArray= MySqlHepler2.getInstance().executeQueryT("select * from articleSheet where articleType=? order by id desc limit ?,?",instance.mysqlParameter);
                          instance.infoFirstPageJSONObject=new JSONObject();
                          instance.infoFirstPageJSONObject.put("results", instance.shareInt);
                          instance.infoFirstPageJSONObject.put("rows",   instance.shareJSONArray); 
                          instance.infoFirstPageJSONObject.put("status", "success");
                         instance.infoFirstPageJSONObject.put("msg", "查询成功");
                          //渠道首页数据
                          instance.mysqlParameter=new String[]{"常见问题"};
                            instance.shareJSONArray=MySqlHepler2.getInstance() .executeQueryT("select count(*)  as  count from articleSheet where articleType=?",instance.mysqlParameter);
                          instance.shareJsonObject=instance.shareJSONArray.getJSONObject(0);
                          instance.shareInt =instance.shareJsonObject.getInt("count"); 
                          instance.mysqlParameter=new String[]{"常见问题","0", "10"};
                          instance.shareJSONArray= MySqlHepler2.getInstance().executeQueryT("select * from articleSheet where articleType=? order by id desc limit ?,?",instance.mysqlParameter);
                          instance.infoFirstPageJSONObject.put("results1", instance.shareInt);
                          instance.infoFirstPageJSONObject.put("rows1",   instance.shareJSONArray); 
                         
                           //联系方式
                          instance.mysqlParameter=new String[]{};
                          instance.shareJSONArray=MySqlHepler2.getInstance() .executeQueryT("select * from officialContactSheet",instance.mysqlParameter);
                           instance.infoFirstPageJSONObject.put("results2",  instance.shareJSONArray.length()); 
                          instance.infoFirstPageJSONObject.put("rows2",  instance.shareJSONArray); 
                         
                          
                     instance.mysqlParameter=new String[]{};
                     instance.memberPriceSheetJSONArray=MySqlHepler2.getInstance() .executeQueryT("select * from memberPriceSheet",instance.mysqlParameter);
                          
               
                     
                        //置顶失效过期
                     instance. finishTimes = System.currentTimeMillis();
                     instance.mysqlParameter=new String[] {String.valueOf(instance. finishTimes)};
                        MySqlHepler2.getInstance().executeUpdate("update publishProductShareInfoSheet set whetherSetTop=0 where setTopFinishLongTimes<? and whetherSetTop=1",instance.mysqlParameter);
                     MySqlHepler2.getInstance().executeUpdate("update qudaoShareSheet set whetherSetTop=0 where setTopFinishLongTimes<? and whetherSetTop=1",instance.mysqlParameter);
                        
                        
                        
                     
                     //用户每间隔10分钟扫描一次,会员到期的用户
                     instance.mysqlParameter=new String[] {"none","none","none","0","资源用户", String.valueOf(instance. finishTimes),"1"};
                        MySqlHepler2.getInstance().executeUpdate("update userSheet set resourceMember=?,resourceMemberBeginData=?,resourceMemberFinishData=?,resourceMemberFinishDataLongData=?,qudaoMemberType=? where resourceMemberFinishDataLongData<? and resourceMember=?",instance.mysqlParameter);
                    
                        
                     instance.mysqlParameter=new String[] {"none","none","none","0","渠道用户", String.valueOf(instance. finishTimes),"1"};
                        MySqlHepler2.getInstance().executeUpdate("update userSheet set qudaoMember=?,qudaoMemberBeginData=?,qudaoMemberFinishData=?,qudaoMemberFinishDataLongData=?,qudaoMemberType=? where qudaoMemberFinishDataLongData<? and qudaoMember=?",instance.mysqlParameter);
                    
                        
                 
                        
                         String  NowData=DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm");
                         
                         //如果时间年月日不等于缓存字段中的年月日,说明到了第二天,执行隔天更新功能
                      instance.secondDayUpdateDataTemp=DateFormatUtils.format(new Date(), "yyyy-MM-dd");
                         if(!instance.secondDayUpdateDataTemp.equals(instance.secondDayUpdateData))
                         {
                             AAAAYulebaoShareSingleton.getInstance().userRegisterIpDictionary=new JSONObject();
                          AAAAYulebaoShareSingleton.getInstance().userRegisterIpDictionary.put("192.168.0.1", "none");
                          for(int i=0;i<instance.memberPriceSheetJSONArray.length();i++)
                            {
                            instance.shareJsonObject=instance.memberPriceSheetJSONArray.getJSONObject(i);
                            instance. limitPublishTimes=instance.shareJsonObject.getString("PublishEveryDay");
                            instance.  limitLookTimes=instance.shareJsonObject.getString("lookTimesEveryDay");
                            instance.  type=instance.shareJsonObject.getString("vipType");
                             instance.mysqlParameter=new String[]{ instance.limitLookTimes,instance.limitPublishTimes,instance.type};
                            if(instance.type.contains("资源"))
                            {
                              MySqlHepler2.getInstance().executeUpdateSingleton("update userSheet set todaySurplusResourceLookTimes=?,todaySurplusResourcePublishTimes=? where resourceMemberType=? ",  instance.mysqlParameter); 
                            }
                            if(instance.type.contains("渠道"))
                            {
                                 MySqlHepler2.getInstance().executeUpdateSingleton("update userSheet set todaySurplusQudaoLookTimes=?,todaySurplusQudaoPublishTimes=? where qudaoMemberType=? ",  instance.mysqlParameter);
                            }
                            }
                           
                          instance. mysqlParameter=new String[]{"第二天凌晨12:00执行",NowData};
                          MySqlHepler2.getInstance().executeUpdate("insert into tempDemoSheet(runmethord,runtimes) values (?,?)", instance. mysqlParameter);
                                  
                             
                             
                         }
                         else
                         {
                      instance. mysqlParameter=new String[]{"进入一次60秒执行一次",NowData};
                       MySqlHepler2.getInstance().executeUpdate("insert into tempDemoSheet(runmethord,runtimes) values (?,?)", instance. mysqlParameter);
                            
                         }
                     }  
            
            
                }
            }
      }

     之前一直用timer+单例控制,在本机系统上间隔更新时间是准确的,但是上传服务器偶尔会出现1分钟跑两次,比如我间隔时间改为1分钟执行一次,偶尔会发现有两次执行记录,一直没管它,改成当前的方式正常了。 

  • 相关阅读:
    iOS 中UI控件的各种对齐方式总结
    BLE 广播数据解析
    Objective-C中一种消息处理方法performSelector: withObject:
    ios的@property属性和@synthesize属性
    iOS中的字符串扫描类NSScanner
    iOS开发技巧(系列十八:扩展UIColor,支持十六进制颜色设置)
    NSMakeRange基础函数应用
    Objective-C中的占位符,打印BOOL类型数据
    NSUInteger和NSInteger和int
    HDU4870:Rating(DP)
  • 原文地址:https://www.cnblogs.com/xiaoliao/p/11622841.html
Copyright © 2020-2023  润新知