竞技场发奖线程池问题修改

master_dev
grimm 2024-05-06 17:55:47 +08:00
parent 191ef1ff83
commit cdeb057ab6
4 changed files with 38 additions and 81 deletions

View File

@ -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()) {

View File

@ -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();
// 缓存锁,保证只有一个服务器执行

View File

@ -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

View File

@ -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);
}
/**
* 线
*/