java - 奇怪的 try/catch 指令

标签 java

<分区>

我在网络上的游戏代码中找到了这些说明。但是,我不明白它是如何工作的。

start = System.nanoTime();
elapsed = System.nanoTime() - start;
        wait = (100/60) - (elapsed / 1000000);

        if(wait < 0)
        {
            wait = 4;
        }

        try
        {
            Thread.sleep(wait);
        } 

        catch (InterruptedException e)
        {
            e.printStackTrace();
        }

我知道 Thread.sleep(wait) 使线程在启动前等待 wait 毫秒数。但在这种情况下,为什么要为所有这些说明而烦恼呢?我尝试放置 Thread.sleep(0),游戏的速度快了 20 倍(所有对象都移动得太快了)。

这些指令是如何工作的?

提前致谢。

最佳答案

基本上,Thread.Sleep() 所做的是卡住代码正在运行的线程,在这种情况下,是应用程序的主线程。 像您的程序一样思考:

Do something....

Wait for X time ("freeze" the program execution)

Do something else.

try/catch 操作与您看到的延迟无关。 基本上,try/catch 就像一个“捕手”,以防线程卡住出现问题(在这种情况下,可能出错的是“某人”(即另一个线程)将尝试中断线程的卡住)。

在那种情况下,用简单的话来说,它会“跳转”并执行写在 catch block 中的代码,防止程序崩溃(把它想象成一个保护层)。

如果你去掉try/catch block ,那么在上面描述的异常情况下,没有任何东西可以防止系统崩溃,你的程序就会爆炸(好吧,不会的,别吓坏了。:P ).

关于java - 奇怪的 try/catch 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32570174/

相关文章:

java - 用java解析http返回的xml

java - 奥里卡 - java.lang.NoClassDefFoundError : javassist/CannotCompileException

java - 使用重放(selectorFoo)但不使用发布(selectorFoo)时出现OOM

java - 访问旧应用程序时 list 合并失败

java.net.SocketException : Software caused connection abort: socket write error when resubmitting the request

java - 我的 jsp 找不到我的 servlet,给我一个 404

java - 替换路径 url 占位符格式

java - 在 Spring MVC Web 应用程序中使用 JSTL 显示列表

Java Swing GUI 在 Windows 任务栏后面呈现

java - 当屏幕分辨率改变时,组件之间的间隔不会改变。为什么?