Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:如何暂停一个类的运行?_Java - Fatal编程技术网

Java:如何暂停一个类的运行?

Java:如何暂停一个类的运行?,java,Java,当我使用Thread.sleep()时,它暂停我的整个程序。是否有任何东西会在不使用多线程的情况下暂停一个类?否。您不能。你有主线。睡眠会使它暂停。如果希望停止运行某个对象而不影响主线程,则需要将其从主线程中分叉,通过使用附加线程,不能暂停“类”本身。类只是一个“死”容器 您可以暂停线程或任务 通常,您会创建一个单独的线程来运行要暂停的任务,并在需要时暂停它-因为它在单独的线程中运行,所以不会挂起整个程序 请参阅此简单示例,您可以运行该示例以更好地了解线程如何并行运行: public stati

当我使用
Thread.sleep()时,它暂停我的整个程序。是否有任何东西会在不使用多线程的情况下暂停一个类?

否。您不能。你有主线。睡眠会使它暂停。如果希望停止运行某个对象而不影响主线程,则需要将其从主线程中分叉,通过使用附加线程,不能暂停“类”本身。类只是一个“死”容器

您可以暂停线程或任务

通常,您会创建一个单独的线程来运行要暂停的任务,并在需要时暂停它-因为它在单独的线程中运行,所以不会挂起整个程序

请参阅此简单示例,您可以运行该示例以更好地了解线程如何并行运行:

public static void main(String[] args) throws InterruptedException {
    Runnable lazyTask = new Runnable() {

        @Override
        public void run() {
            System.out.println("Lazy: I feel like sleeping for a second");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {}
            System.out.println("Lazy: I feel better now");
        }
    };

    new Thread(lazyTask).start();
    //Let's wait a bit until the lazy task goes to sleep
    Thread.sleep(100);
    //now you can do something that will not hang
    System.out.println("Main: I'm sleeping too, but only half a second");
    Thread.sleep(500);
    System.out.println("Main: And I can continue my job while that lazy task is still asleep");
}

您不暂停类,而是暂停线程。在暂停您的唯一线程的那一刻,您也暂停了整个应用程序。因此,没有办法暂停您唯一的线程并期望应用程序继续运行。如果您希望应用程序不仅仅是等待,那么您需要多个线程。

我认为您在这里混淆了一些概念。类和对象不运行。线程运行,它们运行的是由类和对象定义的指令(代码)


因此,不能暂停类或对象,只能暂停线程。此外,如果您的应用程序是单线程的,那么您只有一个“主”线程,如果暂停该线程,那么整个应用程序都将暂停。

对象不定义代码;只有班级。一个对象是一个类的实例,并且只为定义的对象变量分配了内存;为同一类的所有实例共享代码。。。除了用于在运行时生成或加载代码的类之外,在这种情况下,该类的对象可能暂时在内存(堆)中有字节码,但在JVM加载之前,它是不可执行的。