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