繁体   English   中英

每个类默认都有自己的线程吗?

[英]Does each class have its own Thread by default?

我正在使用GUI,正在使用

Thread.sleep();

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

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

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

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

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

还有一件事,您对使用Thread.sleep()的需求尚不清楚。 您只是给出了其最终用法的原因,但没有给出用法的必要性。

从javadoc中获取Thread

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

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

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

请在您要使用睡眠功能的情况下发布详细信息。

自动创建Java类时,默认情况下会使用它创建3个线程。 1.主线程2.线程调度器3.垃圾收集器线程

请观看此说明性视频,以了解线程实际上是什么。

在此示例中,“线程”是音乐盒,您的代码是“纸”,授予线程的处理时间是手柄的旋转。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM