默认情况下,每个类都有自己的Thread吗?

时间:2014-01-27 04:55:19

标签: java multithreading user-interface thread-sleep

我正在使用GUI并且我正在使用

Thread.sleep();

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

5 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:0)

来自Thread的javadoc:

  

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

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

答案 2 :(得分:0)

默认情况下,程序没有多个线程。应该只有一个类有一个主方法。无论是ui应用程序还是任何其他类型的应用程序都无关紧要。

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

答案 3 :(得分:0)

当自动创建java类时,默认情况下会创建3个线程。 1.主线程 2.Thread Scheduler 3.Garbage Collector线程

答案 4 :(得分:0)

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

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

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

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