竞技场发奖线程池问题修改
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.hotfix.HotfixUtil;
|
||||||
import com.ljsd.jieling.logic.GlobleSystemLogic;
|
import com.ljsd.jieling.logic.GlobleSystemLogic;
|
||||||
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
|
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.dao.ServerConfig;
|
||||||
import com.ljsd.jieling.logic.family.GuildLogic;
|
import com.ljsd.jieling.logic.family.GuildLogic;
|
||||||
import com.ljsd.jieling.network.NetManager;
|
import com.ljsd.jieling.network.NetManager;
|
||||||
|
@ -63,7 +62,6 @@ public class GameApplication {
|
||||||
GlobleSystemLogic.getInstence().getCrossGroup();
|
GlobleSystemLogic.getInstence().getCrossGroup();
|
||||||
GuildLogic.getInstance().guildCacheHandle();
|
GuildLogic.getInstance().guildCacheHandle();
|
||||||
HotfixUtil.getInstance();
|
HotfixUtil.getInstance();
|
||||||
ArenaLogic.getInstance().dailySendReward();
|
|
||||||
//控制台gm
|
//控制台gm
|
||||||
Scanner sc = new Scanner(System.in);
|
Scanner sc = new Scanner(System.in);
|
||||||
while (sc.hasNext()) {
|
while (sc.hasNext()) {
|
||||||
|
|
|
@ -3,9 +3,6 @@ package com.ljsd.jieling.logic.arena;
|
||||||
import com.ljsd.GameApplication;
|
import com.ljsd.GameApplication;
|
||||||
import com.ljsd.fight.ArenaRecord;
|
import com.ljsd.fight.ArenaRecord;
|
||||||
import com.ljsd.fight.FightType;
|
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.mongo.MongoUtil;
|
||||||
import com.ljsd.jieling.db.redis.RedisKey;
|
import com.ljsd.jieling.db.redis.RedisKey;
|
||||||
import com.ljsd.jieling.db.redis.RedisUtil;
|
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.WelfareRedPackEvent;
|
||||||
import com.ljsd.jieling.logic.redpacket.WelfareRedPacketType;
|
import com.ljsd.jieling.logic.redpacket.WelfareRedPacketType;
|
||||||
import com.ljsd.jieling.network.session.ISession;
|
import com.ljsd.jieling.network.session.ISession;
|
||||||
import com.ljsd.jieling.thread.ThreadManager;
|
|
||||||
import com.ljsd.jieling.util.*;
|
import com.ljsd.jieling.util.*;
|
||||||
import config.*;
|
import config.*;
|
||||||
import manager.STableManager;
|
import manager.STableManager;
|
||||||
|
@ -47,7 +43,6 @@ import rpc.protocols.CommonProto;
|
||||||
import rpc.protocols.FightInfoProto;
|
import rpc.protocols.FightInfoProto;
|
||||||
import rpc.protocols.MessageTypeProto;
|
import rpc.protocols.MessageTypeProto;
|
||||||
import util.MathUtils;
|
import util.MathUtils;
|
||||||
import util.StringUtil;
|
|
||||||
import util.TimeUtils;
|
import util.TimeUtils;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@ -913,14 +908,6 @@ public class ArenaLogic {
|
||||||
return nextMonday - TimeUtils.HOUR;
|
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");
|
Thread.currentThread().setName("arena_primary_daily_sendReward");
|
||||||
long start = TimeUtils.now();
|
long start = TimeUtils.now();
|
||||||
List<Integer> localRooms = SArenaRoom.getLocalRooms();
|
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");
|
Thread.currentThread().setName("arena_Advanced_daily_sendReward");
|
||||||
long start = TimeUtils.now();
|
long start = TimeUtils.now();
|
||||||
// 缓存锁,保证只有一个服务器执行
|
// 缓存锁,保证只有一个服务器执行
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.ljsd.jieling.thread;
|
||||||
|
|
||||||
|
|
||||||
import com.ljsd.IManager;
|
import com.ljsd.IManager;
|
||||||
|
import com.ljsd.jieling.logic.arena.ArenaLogic;
|
||||||
import com.ljsd.jieling.logic.dao.UserManager;
|
import com.ljsd.jieling.logic.dao.UserManager;
|
||||||
import com.ljsd.jieling.logic.rank.CrossRankManager;
|
import com.ljsd.jieling.logic.rank.CrossRankManager;
|
||||||
import com.ljsd.jieling.thread.task.*;
|
import com.ljsd.jieling.thread.task.*;
|
||||||
|
@ -11,7 +12,6 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import util.TimeUtils;
|
import util.TimeUtils;
|
||||||
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.*;
|
import java.util.concurrent.*;
|
||||||
|
@ -126,6 +126,9 @@ public class ThreadManager implements IManager {
|
||||||
TaskKit.scheduleAtFixedRate(UserManager::checkOffline, 2, 1, TimeUnit.HOURS);
|
TaskKit.scheduleAtFixedRate(UserManager::checkOffline, 2, 1, TimeUnit.HOURS);
|
||||||
// 跨服排行榜 每俩小时运行一次
|
// 跨服排行榜 每俩小时运行一次
|
||||||
TaskKit.scheduleAtFixedRate(CrossRankManager::crossRankHandle, 60, 7200, TimeUnit.SECONDS);
|
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(() -> {
|
scheduledFutureSets.add(scheduledExecutor.scheduleAtFixedRate(new Thread(() -> {
|
||||||
long lastMilis = System.currentTimeMillis();
|
long lastMilis = System.currentTimeMillis();
|
||||||
|
@ -137,69 +140,6 @@ public class ThreadManager implements IManager {
|
||||||
}), delayForMinute, 1, TimeUnit.SECONDS));
|
}), 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 具体待执行的任务
|
* @param task 具体待执行的任务
|
||||||
|
|
|
@ -136,6 +136,38 @@ public abstract class TaskKit {
|
||||||
timerList.add(timer);
|
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