0

を使用するThread.sleep();と、プログラム全体が一時停止します。マルチスレッドを使用せずに 1 つのクラスを一時停止するものはありますか?

4

4 に答える 4

4

クラスを一時停止するのではなく、スレッドを一時停止します。唯一のスレッドを一時停止した瞬間に、アプリケーション全体も一時停止します。したがって、唯一のスレッドを一時停止して、アプリケーションが引き続き実行されることを期待する方法はありません。アプリケーションが単に待機する以上のことを行うと予想される場合は、複数のスレッドが必要になります。

于 2012-07-27T15:01:40.867 に答える
3

ここでいくつかの概念を混乱させていると思います。クラスとオブジェクトは実行されません。スレッドは実行され、実行されるのはクラスとオブジェクトによって定義された命令(コード)です。

したがって、クラスまたはオブジェクトを一時停止することはできず、スレッドのみを一時停止できます。さらに、アプリケーションがシングルスレッドの場合、「メイン」スレッドしかないため、そのスレッドを一時停止すると、アプリケーション全体が一時停止します。

于 2012-07-27T15:01:54.300 に答える
2

「クラス」自体を一時停止することはできません。クラスは単なる「死んだ」コンテナです。

できることは、スレッドまたはタスクを一時停止することです。

通常、一時停止するタスクを実行するために別のスレッドを作成し、必要に応じて一時停止します。別のスレッドで実行されるため、プログラム全体がハングすることはありません。

スレッドを並行して実行する方法をよりよく理解するために実行できるこの簡単な例を参照してください。

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");
}
于 2012-07-27T15:01:39.823 に答える
0

いいえ、あなたがすることはできません。メインスレッドがあります。スリープは一時停止します。メインスレッドに影響を与えずに実行を停止したい場合は、追加のスレッドを使用して、メインスレッドからフォークする必要があります

于 2012-07-27T15:01:27.777 に答える