用Java创建服务器端计时器的最佳方法是什么?

用Java创建服务器端计时器的最佳方法是什么?,java,timer,Java,Timer,我正试图让它这样当一个球员被添加到这个计时器倒计时:p我必须在我的主服务器初始化它,以便计时器将继续倒计时,即使球员离线。计时器需要检查一个玩家是否被分配到一个特色点,然后开始倒数如果没有返回当然:p 公共静态无效特性数据项(玩家c){ LocalDateTime now=LocalDateTime.now(); DateTimeFormatter time=DateTimeFormatter.of模式(“H”);//获取小时数 int currentTime=Integer.parseInt

我正试图让它这样当一个球员被添加到这个计时器倒计时:p我必须在我的主服务器初始化它,以便计时器将继续倒计时,即使球员离线。计时器需要检查一个玩家是否被分配到一个特色点,然后开始倒数如果没有返回当然:p

公共静态无效特性数据项(玩家c){
LocalDateTime now=LocalDateTime.now();
DateTimeFormatter time=DateTimeFormatter.of模式(“H”);//获取小时数
int currentTime=Integer.parseInt(time.format(现在));
int start1=22017,id=0,总销售额=0;
列表项=getSalesForPlayer(c.getName().toLowerCase());
c、 getPA().sendFrame126(“特色项目”,22004);
用于(上市销售:项目){
if(sale.soldAll())
继续;
c、 getPA().sendFrame126(sale.getSeller(),start1);//这将调用特色商店中的顶级变量
start1++;
c、 getPA().sendFrame126(“时间:”+(24-currentTime)+“(H)”,start1);//这将调用底部变量
start1++;
start1++;
总销售额++;
杂项打印(“名称:+c.getName().toLowerCase());
c、 lastTimeForPost=now.getDayOfMonth();
杂项打印(“时间:+c.lastTimeForPost”);
如果(总销售额==10){
杂项打印(“达到10项特色销售”);
打破
}
}
}
私有静态最终可运行服务器任务=()->{
试一试{
process();
playerHandler.process();
npcHandler.process();
shopHandler.process();
Highpkarena.process();
Lowpkarena.process();
globalObjects.pulse();
CycleeEventHandler.getSingleton().process();
events.process();
serverData.processQueue();
}捕获(可丢弃的t){
t、 printStackTrace();
t、 getCause();
t、 getMessage();
t、 fillInStackTrace();
System.out.println(“服务器任务-检查错误”);
PlayerHandler.stream().filter(Objects::nonNull).forEach(PlayerSave::save);
}
};

我知道我必须在我的服务器main中调用它,但不确定如何执行或加载:p

服务器上永远不应该有实际运行的计时器。相反,存储(无论您如何存储)最后一个时间戳(并使用
Instant.now()
),并在需要时计算经过的时间(例如
Duration.between(previous,now())
)1.我想我应该去掉当地的日期和时间。我想我走错了方向现在时间是24小时-无论什么时候,我都需要它来显示计时器,以小时为单位倒计时,就像我想让某人成为8小时的特色玩家,然后显示倒计时:p 7hrs 59:59秒你不做倒计时在服务器上。它存在于您拥有的任何客户端中,比如Android或JavaScript程序。我绝对希望服务器端保存计时器,以便在客户端注销时更新它?这是一家即使在离线时也会不断买卖玩家物品的商店:p这是在服务器端完成的。你永远不应该在服务器上有一个实际运行的计时器。相反,存储(无论您如何存储)最后一个时间戳(并使用
Instant.now()
),并在需要时计算经过的时间(例如
Duration.between(previous,now())
)1.我想我应该去掉当地的日期和时间。我想我走错了方向现在时间是24小时-无论什么时候,我都需要它来显示计时器,以小时为单位倒计时,就像我想让某人成为8小时的特色玩家,然后显示倒计时:p 7hrs 59:59秒你不做倒计时在服务器上。它存在于您拥有的任何客户端中,比如Android或JavaScript程序。我绝对希望服务器端保存计时器,以便在客户端注销时更新它?这是一家即使在离线状态下也会不断买卖玩家物品的商店:p这是在服务器端完成的
    public static void featuredItems(Player c) {
    LocalDateTime now = LocalDateTime.now();
    DateTimeFormatter time = DateTimeFormatter.ofPattern("H"); //Gets hours
    int currentTime = Integer.parseInt(time.format(now));
    int start1 = 22017, id = 0, totalSales = 0;

    List<ListedItem> items = getSalesForPlayer(c.getName().toLowerCase());
        c.getPA().sendFrame126("Featured Items", 22004);


        for (ListedItem sale : items) {
            if (sale.soldAll())
                continue;
            c.getPA().sendFrame126(sale.getSeller(), start1);//this calls for the top variable in featured shops
        start1++;
        c.getPA().sendFrame126("Time: " + (24 - currentTime) + " (H)", start1);//this calls for bottom varriable
        start1 ++;
        start1 ++;
        totalSales++;
        Misc.print("Name:" +c.getName().toLowerCase());
        c.lastTimeForPost = now.getDayOfMonth();
        Misc.print("Time:" +c.lastTimeForPost);
        if (totalSales == 10) {
             Misc.print("Reached 10 featured sales");
            break;
        }
        }
}


    private static final Runnable SERVER_TASKS = () -> {
    try {


        itemHandler.process();
        playerHandler.process();
        npcHandler.process();
        shopHandler.process();
        Highpkarena.process();
        Lowpkarena.process();
        globalObjects.pulse();
        CycleEventHandler.getSingleton().process();
        events.process();
        serverData.processQueue();
    } catch (Throwable t) {
        t.printStackTrace();
        t.getCause();
        t.getMessage();
        t.fillInStackTrace();
        System.out.println("Server tasks - Check for error");
        PlayerHandler.stream().filter(Objects::nonNull).forEach(PlayerSave::save);
    }
};