を使用するThread.sleep();
と、プログラム全体が一時停止します。マルチスレッドを使用せずに 1 つのクラスを一時停止するものはありますか?
4 に答える
クラスを一時停止するのではなく、スレッドを一時停止します。唯一のスレッドを一時停止した瞬間に、アプリケーション全体も一時停止します。したがって、唯一のスレッドを一時停止して、アプリケーションが引き続き実行されることを期待する方法はありません。アプリケーションが単に待機する以上のことを行うと予想される場合は、複数のスレッドが必要になります。
ここでいくつかの概念を混乱させていると思います。クラスとオブジェクトは実行されません。スレッドは実行され、実行されるのはクラスとオブジェクトによって定義された命令(コード)です。
したがって、クラスまたはオブジェクトを一時停止することはできず、スレッドのみを一時停止できます。さらに、アプリケーションがシングルスレッドの場合、「メイン」スレッドしかないため、そのスレッドを一時停止すると、アプリケーション全体が一時停止します。
「クラス」自体を一時停止することはできません。クラスは単なる「死んだ」コンテナです。
できることは、スレッドまたはタスクを一時停止することです。
通常、一時停止するタスクを実行するために別のスレッドを作成し、必要に応じて一時停止します。別のスレッドで実行されるため、プログラム全体がハングすることはありません。
スレッドを並行して実行する方法をよりよく理解するために実行できるこの簡単な例を参照してください。
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");
}
いいえ、あなたがすることはできません。メインスレッドがあります。スリープは一時停止します。メインスレッドに影響を与えずに実行を停止したい場合は、追加のスレッドを使用して、メインスレッドからフォークする必要があります