【问题标题】:Does each class have its own Thread by default?默认情况下,每个类都有自己的线程吗?
【发布时间】:2014-01-27 04:55:19
【问题描述】:

我正在使用 GUI,我正在使用

Thread.sleep();

在某些类中,我想知道是否需要为我的Main 类(GUI 类)创建一个单独的线程,或者每个类是否默认都有一个单独的线程。请注意,我首先提出Thread.sleep(); 的原因是,当使用GUI 的Thread.sleep(); 时几乎会冻结您的GUI。无论如何,我的主要问题是我是否需要为我的 Main 类创建一个单独的线程,或者每个类默认都有一个单独的线程。

【问题讨论】:

  • 不,每个类都没有自己的线程。默认情况下,Java 程序仅从一个线程开始(实际上还有其他线程,例如垃圾收集线程,但暂时忽略这些)。任何其他线程都需要以编程方式启动。至于你的 GUI,你不应该在主线程中运行你的 GUI。

标签: java multithreading user-interface thread-sleep


【解决方案1】:

Thread.sleep() 是 Thread 类的静态方法。因此,无论您在方法中放置哪个类,在运行时,如果线程调用流遇到调用 Thread.sleep() 的此类方法,则该线程将被阻塞一段时间。

您的问题:
无论如何,我的主要问题是我是否需要为我的 Main 类创建一个单独的线程,或者每个类是否默认都有一个单独的线程。

  • 默认情况下,每个类都有一个单独的线程 -- 错误的语句
    -- 线程类不是每个类都继承
    -- 通常意义上的Thread是一个调用流。它通过其方法调用执行遇到的任何类。
    -- 类和线程是两个独立的概念。
    ---- 类是一个实体的定义,它不能自己运行,它可以被加载,用数据实例化,可以进行方法调用和垃圾回收。
    ---- 线程是运行时的执行实体。它可以被启动、运行、阻塞、停止。为了支持这一概念,Java 提供了 Thread 类或 Runnable 接口来分别扩展/实现。

  • 我需要为我的 Main 类创建一个单独的线程吗?
    -- 您的主类将在由您的 JVM 实例化和启动的 MainThread 中执行。
    -- 最好定义一个单独的用户定义线程来启动您的 GUI。
    -- 如果在MainThread(或)用户定义的Thread中,如果在调用流程中遇到Thread.sleep(),则该特定线程将被阻塞。

还有一件事,您的问题不清楚您是否需要使用 Thread.sleep()。您只是给出了使用它的原因,但没有给出使用的必要性。

【讨论】:

    【解决方案2】:

    来自Thread的javadoc:

    使当前正在执行的线程休眠(暂时停止 执行)为指定的毫秒数,受制于 系统计时器和调度程序的精度和准确性。线程 不会失去任何监视器的所有权。

    不要介意sleep() 方法是静态的,它是为您调用它的线程执行的。因此,如果您从 GUI 调用它,它会使您的主 UI 线程进入睡眠状态,从而完全冻结 UI。

    【讨论】:

      【解决方案3】:

      默认情况下,程序不会有多个线程。应该只有一个类具有 main 方法。不管是 ui 应用程序还是任何其他类型的应用程序。

      请详细说明您想在什么场景下使用睡眠功能。

      【讨论】:

        【解决方案4】:

        当一个 java 类被自动创建时,默认情况下会创建 3 个线程。 1.主线程 2.线程调度器 3.垃圾回收线程

        【讨论】:

          【解决方案5】:

          请观看this explanatory video 以了解线程实际上是什么。

          在这个例子中,线程是音乐盒,你的代码是一张纸,线程的处理时间是手柄的旋转。

          因此,您的主类代码(纸页)被插入到由 JVM 生成的线程(音乐盒)中并开始执行(句柄旋转)。一旦你调用sleep(1000),“手柄的旋转”就会暂停 1 秒,代码的执行也是如此。 Thread.sleep()Thread.getCurrentThread().sleep() 的捷径。

          如果您现在有多个线程(音乐盒),您当然可以暂停一个,而另一个仍在运行。因此,如果您有一个主线程和一个 GUI 线程,您可以暂停主线程,您的 GUI 将正常工作(除非它实际上尝试访问主线程)。但是,如果您暂停 GUI 线程,它似乎会被冻结。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-08-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-17
            • 2018-04-17
            • 1970-01-01
            相关资源
            最近更新 更多