竞技场发奖线程池问题修改
parent
191ef1ff83
commit
cdeb057ab6
|
@ -8,7 +8,6 @@ import com.ljsd.jieling.db.redis.RedisUtil;
|
|||
import com.ljsd.jieling.hotfix.HotfixUtil;
|
||||
import com.ljsd.jieling.logic.GlobleSystemLogic;
|
||||
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
|
||||
import com.ljsd.jieling.logic.arena.ArenaLogic;
|
||||
import com.ljsd.jieling.logic.dao.ServerConfig;
|
||||
import com.ljsd.jieling.logic.family.GuildLogic;
|
||||
import com.ljsd.jieling.network.NetManager;
|
||||
|
@ -63,7 +62,6 @@ public class GameApplication {
|
|||
GlobleSystemLogic.getInstence().getCrossGroup();
|
||||
GuildLogic.getInstance().guildCacheHandle();
|
||||
HotfixUtil.getInstance();
|
||||
ArenaLogic.getInstance().dailySendReward();
|
||||
//控制台gm
|
||||
Scanner sc = new Scanner(System.in);
|
||||
while (sc.hasNext()) {
|
||||
|
|
|
@ -3,9 +3,6 @@ package com.ljsd.jieling.logic.arena;
|
|||
import com.ljsd.GameApplication;
|
||||
import com.ljsd.fight.ArenaRecord;
|
||||
import com.ljsd.fight.FightType;
|
||||
import com.ljsd.jieling.core.GlobalsDef;
|
||||
import com.ljsd.jieling.config.clazzStaticCfg.SArenaRobotStaticConfig;
|
||||
import com.ljsd.jieling.core.FunctionIdEnum;
|
||||
import com.ljsd.jieling.db.mongo.MongoUtil;
|
||||
import com.ljsd.jieling.db.redis.RedisKey;
|
||||
import com.ljsd.jieling.db.redis.RedisUtil;
|
||||
|
@ -35,7 +32,6 @@ import com.ljsd.jieling.logic.rank.RankEnum;
|
|||
import com.ljsd.jieling.logic.redpacket.WelfareRedPackEvent;
|
||||
import com.ljsd.jieling.logic.redpacket.WelfareRedPacketType;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.thread.ThreadManager;
|
||||
import com.ljsd.jieling.util.*;
|
||||
import config.*;
|
||||
import manager.STableManager;
|
||||
|
@ -47,7 +43,6 @@ import rpc.protocols.CommonProto;
|
|||
import rpc.protocols.FightInfoProto;
|
||||
import rpc.protocols.MessageTypeProto;
|
||||
import util.MathUtils;
|
||||
import util.StringUtil;
|
||||
import util.TimeUtils;
|
||||
|
||||
import java.util.*;
|
||||
|
@ -913,14 +908,6 @@ public class ArenaLogic {
|
|||
return nextMonday - TimeUtils.HOUR;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新竞技场每日发奖
|
||||
*/
|
||||
public void dailySendReward(){
|
||||
ThreadManager.scheduleDailyCycleTask(this::newArenaRewardPrimaryDaily,21,0,0);
|
||||
ThreadManager.scheduleDailyCycleTask(this::newArenaRewardAdvancedDaily,21,1,0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 赛季结束赋值重置标记
|
||||
*/
|
||||
|
@ -935,7 +922,7 @@ public class ArenaLogic {
|
|||
/**
|
||||
* 新竞技场每日奖励
|
||||
*/
|
||||
public void newArenaRewardPrimaryDaily(){
|
||||
public static void newArenaRewardPrimaryDaily(){
|
||||
Thread.currentThread().setName("arena_primary_daily_sendReward");
|
||||
long start = TimeUtils.now();
|
||||
List<Integer> localRooms = SArenaRoom.getLocalRooms();
|
||||
|
@ -995,7 +982,7 @@ public class ArenaLogic {
|
|||
/**
|
||||
* 新竞技场赛季奖励
|
||||
*/
|
||||
public void newArenaRewardAdvancedDaily(){
|
||||
public static void newArenaRewardAdvancedDaily(){
|
||||
Thread.currentThread().setName("arena_Advanced_daily_sendReward");
|
||||
long start = TimeUtils.now();
|
||||
// 缓存锁,保证只有一个服务器执行
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.ljsd.jieling.thread;
|
|||
|
||||
|
||||
import com.ljsd.IManager;
|
||||
import com.ljsd.jieling.logic.arena.ArenaLogic;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
import com.ljsd.jieling.logic.rank.CrossRankManager;
|
||||
import com.ljsd.jieling.thread.task.*;
|
||||
|
@ -11,7 +12,6 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
import util.TimeUtils;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.*;
|
||||
|
@ -126,6 +126,9 @@ public class ThreadManager implements IManager {
|
|||
TaskKit.scheduleAtFixedRate(UserManager::checkOffline, 2, 1, TimeUnit.HOURS);
|
||||
// 跨服排行榜 每俩小时运行一次
|
||||
TaskKit.scheduleAtFixedRate(CrossRankManager::crossRankHandle, 60, 7200, TimeUnit.SECONDS);
|
||||
// 新竞技场每日奖励发放
|
||||
TaskKit.scheduleDailyCycleTask(ArenaLogic::newArenaRewardPrimaryDaily,21,0,0);
|
||||
TaskKit.scheduleDailyCycleTask(ArenaLogic::newArenaRewardAdvancedDaily,21,1,0);
|
||||
// 定时重启线程池
|
||||
scheduledFutureSets.add(scheduledExecutor.scheduleAtFixedRate(new Thread(() -> {
|
||||
long lastMilis = System.currentTimeMillis();
|
||||
|
@ -137,69 +140,6 @@ public class ThreadManager implements IManager {
|
|||
}), delayForMinute, 1, TimeUnit.SECONDS));
|
||||
}
|
||||
|
||||
/**
|
||||
* 每日循环,指定时间运行任务
|
||||
* @param hourOfDay 小时/24
|
||||
* @param minute 分
|
||||
* @param second 秒
|
||||
* @param task 任务
|
||||
*/
|
||||
public static void scheduleDailyCycleTask(Runnable task, int hourOfDay, int minute, int second) {
|
||||
// 获取当前时间
|
||||
Calendar now = Calendar.getInstance();
|
||||
Calendar nextRun = (Calendar) now.clone();
|
||||
|
||||
// 设置下一次执行任务的时间
|
||||
nextRun.set(Calendar.HOUR_OF_DAY, hourOfDay);
|
||||
nextRun.set(Calendar.MINUTE, minute);
|
||||
nextRun.set(Calendar.SECOND, second);
|
||||
nextRun.set(Calendar.MILLISECOND, 0);
|
||||
|
||||
// 如果今天的执行时间已经过去,则第一次执行时间设为明天
|
||||
if (nextRun.before(now)) {
|
||||
nextRun.add(Calendar.DATE, 1);
|
||||
}
|
||||
|
||||
// 计算从当前时间到下一个执行时间的延迟
|
||||
long initialDelay = nextRun.getTimeInMillis() - now.getTimeInMillis();
|
||||
|
||||
// 以24小时为周期执行任务
|
||||
long period = 24 * 60 * 60 * 1000;
|
||||
|
||||
TaskKit.scheduleAtFixedRate(task, initialDelay, period, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
/**
|
||||
* 周循环定时任务
|
||||
* @param task 任务
|
||||
* @param dayOfWeek 周几
|
||||
* @param hourOfDay 时
|
||||
* @param minute 分
|
||||
* @param second 秒
|
||||
*/
|
||||
public static void scheduleWeeklyCycleTask(Runnable task, int dayOfWeek, int hourOfDay, int minute, int second) {
|
||||
Calendar now = Calendar.getInstance();
|
||||
Calendar nextRun = (Calendar) now.clone();
|
||||
|
||||
nextRun.set(Calendar.DAY_OF_WEEK, dayOfWeek);
|
||||
nextRun.set(Calendar.HOUR_OF_DAY, hourOfDay);
|
||||
nextRun.set(Calendar.MINUTE, minute);
|
||||
nextRun.set(Calendar.SECOND, second);
|
||||
nextRun.set(Calendar.MILLISECOND, 0);
|
||||
|
||||
// 如果这周的执行时间已经过去,则将下一次执行时间设为下周
|
||||
if (nextRun.before(now) || nextRun.equals(now)) {
|
||||
nextRun.add(Calendar.DATE, 7);
|
||||
}
|
||||
|
||||
// 计算从当前时间到下一次执行时间的延迟
|
||||
long initialDelay = nextRun.getTimeInMillis() - now.getTimeInMillis();
|
||||
// 设置周期为一周
|
||||
long period = 7 * 24 * 60 * 60 * 1000;
|
||||
|
||||
scheduledExecutor.scheduleAtFixedRate(task, initialDelay, period, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
/**
|
||||
* 在指定的延时之后运行一次任务。
|
||||
* @param task 具体待执行的任务
|
||||
|
|
|
@ -136,6 +136,38 @@ public abstract class TaskKit {
|
|||
timerList.add(timer);
|
||||
}
|
||||
|
||||
/**
|
||||
* 每日循环,指定时间运行任务
|
||||
* @param hourOfDay 小时/24
|
||||
* @param minute 分
|
||||
* @param second 秒
|
||||
* @param task 任务
|
||||
*/
|
||||
public static void scheduleDailyCycleTask(Runnable task, int hourOfDay, int minute, int second) {
|
||||
// 获取当前时间
|
||||
Calendar now = Calendar.getInstance();
|
||||
Calendar nextRun = (Calendar) now.clone();
|
||||
|
||||
// 设置下一次执行任务的时间
|
||||
nextRun.set(Calendar.HOUR_OF_DAY, hourOfDay);
|
||||
nextRun.set(Calendar.MINUTE, minute);
|
||||
nextRun.set(Calendar.SECOND, second);
|
||||
nextRun.set(Calendar.MILLISECOND, 0);
|
||||
|
||||
// 如果今天的执行时间已经过去,则第一次执行时间设为明天
|
||||
if (nextRun.before(now)) {
|
||||
nextRun.add(Calendar.DATE, 1);
|
||||
}
|
||||
|
||||
// 计算从当前时间到下一个执行时间的延迟
|
||||
long initialDelay = nextRun.getTimeInMillis() - now.getTimeInMillis();
|
||||
|
||||
// 以24小时为周期执行任务
|
||||
long period = 24 * 60 * 60 * 1000;
|
||||
|
||||
scheduleAtFixedRate(task, initialDelay, period, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
/**
|
||||
* 调整线程池大小
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue