【问题标题】:is it necessary to extend thread class to use the sleep method..? [duplicate]是否有必要扩展线程类以使用睡眠方法..? [复制]
【发布时间】:2018-10-08 14:12:50
【问题描述】:

所以我正在学习java,我在这里有点困惑...... 所以在学习线程的过程中,我了解到有必要扩展 Thread 类或实现 Runnable 类。 并且在执行这个程序时使用 Thread.sleep() 而不执行上述任何过程。

链接: http://www.abihitechsolutions.com/applets-mini-project-in-java-free-source-code/

谁能解释一下这是怎么回事?

【问题讨论】:

  • 如果您使用的教程告诉您扩展Thread,请找到一个新的。通常,您实现Runnable(可能作为lambda 方法)并将其传递给Thread 实例(或管理线程的东西)。 Thread.sleep 在实际程序中也没有用 - 你需要某种计时器。
  • 没有。 Thread.sleep()Thread 类中的 static method。您无需拥有Thread 实例即可调用它。

标签: java multithreading applet


【解决方案1】:

通过使用 Thread.sleep(X) 实际上你正在暂停执行时间 X。

这适用于向服务器或数据库发送请求。没有人愿意一次性向数据库或服务器发送一个巨大的请求。

做小份总是合理的。您可以划分您的请求并通过等待指定的持续时间发送它们。

这是Thread.sleep()的重要用法之一

有一种非常合适的方法来处理线程暂停,即等待/通知。我建议使用它。 你可以从那里检查; https://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html

【讨论】:

    【解决方案2】:

    It is much better to implement Runnable than to extends ThreadThread.sleep() 是一个 static 方法,因此您可以从任何地方调用它。

    class RunMe implements Runnable {
    
        @Override
        public void run() {
            for (int i = 0; i < 100; i++) {
                System.out.println("Hello");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    请记住,所有 Java 代码都在一个线程中运行,因此可以在任何地方调用 Thread.sleep()

    【讨论】:

    • 很好的例子,但我认为 OP 是在询问当程序根本没有创建任何新的 Thread 实例时,程序如何调用 Thread.sleep()
    • @SolomonSlow - 好电话 - FTFY
    【解决方案3】:

    你可以使用 Thread.sleep 而不实际创建线程的原因是因为主程序也在线程上运行。您只是在主线程上调用 sleep 。当您调用 Thread.sleep 时,java 会为您找出它实际运行在哪个线程上。

    【讨论】:

    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多