在 Java 中创建等待线程的 main() 循环的黄金标准是什么

安德烈亚斯·希斯

我的任务是编写一个小型服务器应用程序。它应该通过控制台启动,然后在后台运行,处理一些网络流量并在本地计算内容,直到它收到关闭信号。我很确定我可以处理所有这些 - 除了非常基本的应用程序架构。我非常不确定如何让我的主循环等待应用程序完成。所以这是我当前的代码,清理并省略了不必要的部分。

public class TestServer {

public static Logger logger;
private static Boolean abortStartup = false;
private static ServerModule server;

public static void main(String[] args) {
    System.out.println("Starting Server...");
        initializeServer(); //this function reads config file, and initializes all variables and stuff. If anything goes wrong, abortStartup is set to true

        if (!abortStartup) {
            runMainLoop();              
        }

        if (!abortStartup) {
            cleanup(); //clean up all initialized variables and objects
        }

    System.out.println("Goodbye.");
}


private static void runMainLoop() {
    //This is the main loop. Run this until application terminates.
    logger.log(null, "Starting main loop...", Logger.LOGLEVEL_NOTE);
        server.run();
        while (server.isAlive()) {
            //wait until server dies.
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                logger.log(null, "Interrupted during wait for main thread.", Logger.LOGLEVEL_ERROR);
            }
        }
    logger.log(null, "Done.", Logger.LOGLEVEL_NOTE);
}

ServerModule 看起来像这样:

public class ServerModule{

public Boolean shutdown = false;
private Boolean stayAlive = true;


public ServerModule(){
    //setup everything
}

public void run() {
    //initalize timers, instantiate objects etc.. add listeners and everything. At some point, a network message will set stayAlive to false;
}

public Boolean isAlive() {
    return stayAlive;
}

现在是实际问题:有没有更优雅或更有效的方法来解决这个问题?我特别在谈论这部分:

while (server.isAlive()) {
            //wait until server dies.
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                logger.log(null, "Interrupted during wait for main thread.", Logger.LOGLEVEL_ERROR);
            }

thread.sleep 在这里好吗?我什至可以或应该省略它吗?我想在我的代码的这一点上等待,这样我就可以在执行停止后进行清理。

ΦXocę 웃 Пe peúpa tsu

您可以使您的服务器具有可运行性,将其打包到一个线程中并加入!

例子

public static void main(String[] args) throws InterruptedException {
    Thread t = new Thread(() -> {
        try {
            Thread.sleep(5000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    });
    System.out.println("Starting Server!");
    t.start();
    t.join();
    System.out.println("Server is done!");

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单行if语句的Java标准是什么?

来自分类Dev

java线程“ main”中的异常是什么错误?

来自分类Dev

Java中组件的基准是什么

来自分类Dev

Main方法等待执行中的线程完成。为什么?

来自分类Dev

在gcc中包含语言的标准是什么?

来自分类Dev

在JSON中定义空对象的标准是什么

来自分类Dev

codeigniter中查询编写的标准是什么

来自分类Dev

为什么我在递归 java 方法中收到“线程“main”java.lang.StackOverflowError 中的“异常”?

来自分类Dev

(更新)QT QML 5.6-是什么导致此警告“ QApplication未在main()线程中创建”?

来自分类Dev

线程main中的java.lang.StackOverflowError

来自分类Dev

Java :(错误)Main.main中的线程“ main”中的异常java.lang.NullPointerException(Main.java:14)

来自分类Dev

为什么我收到错误消息:“线程“ main”中的异常java.lang.NullPointerException”

来自分类Dev

在Java中唤醒等待线程

来自分类Dev

java错误:线程“ main”中的异常java.lang.NoClassDefFoundError

来自分类Dev

在Java中的main内部调用main方法

来自分类Dev

camelCase中的单个字母单词,处理这些单词的标准是什么?

来自分类Dev

在Fantom afIoc中的IocService和RegistryBuilder之间选择的标准是什么

来自分类Dev

PowerShell中的对象平等标准是什么?ServiceController如何定义Equals方法?

来自分类Dev

Java:如何在不覆盖 main 的情况下在类中创建无限循环

来自分类Dev

如何使用Java中的循环创建多个线程

来自分类Dev

在Java中创建多个线程时,为什么没有调用系统调用来创建线程?

来自分类Dev

Java main方法中的循环和异常处理

来自分类Dev

使用Java中的main方法为类创建对象时会发生什么

来自分类Dev

ideone上的线程“ main”中的异常java.util.NoSuchElementException

来自分类Dev

从Java中的main()内部在线程实例上运行wait()

来自分类Dev

Hbase示例,线程“ main”中的异常java.lang.NoClassDefFoundError

来自分类Dev

ideone上的线程“ main”中的异常java.util.NoSuchElementException

来自分类Dev

错误:线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException

来自分类Dev

线程“main”中的Scala异常java.io.FileNotFoundException

Related 相关文章

  1. 1

    单行if语句的Java标准是什么?

  2. 2

    java线程“ main”中的异常是什么错误?

  3. 3

    Java中组件的基准是什么

  4. 4

    Main方法等待执行中的线程完成。为什么?

  5. 5

    在gcc中包含语言的标准是什么?

  6. 6

    在JSON中定义空对象的标准是什么

  7. 7

    codeigniter中查询编写的标准是什么

  8. 8

    为什么我在递归 java 方法中收到“线程“main”java.lang.StackOverflowError 中的“异常”?

  9. 9

    (更新)QT QML 5.6-是什么导致此警告“ QApplication未在main()线程中创建”?

  10. 10

    线程main中的java.lang.StackOverflowError

  11. 11

    Java :(错误)Main.main中的线程“ main”中的异常java.lang.NullPointerException(Main.java:14)

  12. 12

    为什么我收到错误消息:“线程“ main”中的异常java.lang.NullPointerException”

  13. 13

    在Java中唤醒等待线程

  14. 14

    java错误:线程“ main”中的异常java.lang.NoClassDefFoundError

  15. 15

    在Java中的main内部调用main方法

  16. 16

    camelCase中的单个字母单词,处理这些单词的标准是什么?

  17. 17

    在Fantom afIoc中的IocService和RegistryBuilder之间选择的标准是什么

  18. 18

    PowerShell中的对象平等标准是什么?ServiceController如何定义Equals方法?

  19. 19

    Java:如何在不覆盖 main 的情况下在类中创建无限循环

  20. 20

    如何使用Java中的循环创建多个线程

  21. 21

    在Java中创建多个线程时,为什么没有调用系统调用来创建线程?

  22. 22

    Java main方法中的循环和异常处理

  23. 23

    使用Java中的main方法为类创建对象时会发生什么

  24. 24

    ideone上的线程“ main”中的异常java.util.NoSuchElementException

  25. 25

    从Java中的main()内部在线程实例上运行wait()

  26. 26

    Hbase示例,线程“ main”中的异常java.lang.NoClassDefFoundError

  27. 27

    ideone上的线程“ main”中的异常java.util.NoSuchElementException

  28. 28

    错误:线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException

  29. 29

    线程“main”中的Scala异常java.io.FileNotFoundException

热门标签

归档