Javaコラム Javaエンジニアのためのお役立ちコラム

Javaのsleep機能 Tread sleepメソッドとは?基本情報をご紹介

2021年06月29日
SE
Javaのsleep機能 Tread sleepメソッドとはどのような機能なのでしょうか。
PM
Javaでスレッドを行う途中で処理を一時停止させる機能です。

Java sleep機能とは?


稼働中のソフトウェアやオペレーションシステムの機能を継続させたまま、休止状態にしておくのがパソコンのsleep機能ですが、Javaにも処理を停止させることのできるsleep機能があります。

Javaプログラムの処理の実行単位のひとつにスレッドがあります。Javaでスレッドを行う中で、その処理を一時停止させるのがJavaのsleep機能になります。

スレッドとは?

スレッドは、プログラム上の細かい処理の実行単位(ひとつひとつの処理の流れのこと)ですが、いくつかの処理を行うプログラムを作る場合、2つの方法を使うことができます。

いくつかの処理を経て、直線的に実行するプログラムをシングルスレッドといいます。この場合、プログラムの処理全体の流れは一つのタスクであり、動かすとプロセスが一つ立ち上がるということになります。

同じプログラムでも、同時進行できる処理を並行して行う場合をマルチスレッドといいます。この場合はタスクは一つですが、2つのスレッドが動いているということになります。別名で、並行処理とも呼ばれています。

スレッドの例え

スレッドとは、タスクやプログラムよりも細かい処理の実行単位です。そのためスレッドに違いはあっても、結果的に共通のタスクによって、共通のプログラムを作成することができます。

わかりやすい例えを使ってみましょう。プログラムを朝の調理支度とします。お弁当作りと朝食作りがタスクです。お弁当作りをしてから、朝食を作るという直線的なタスクを経て朝支度というプログラムを終えるのがシングルスレッドです。

一方、同じプログラムを、お弁当作りのタスクと同時並行しながら朝食を作るタスクを行うのがマルチスレッドということになります。

sleepメソッドとは?

スレッドを一時的に停止させることのできるのが、Javaのsleepメソッドです。スレッドクラスにあるため、Thread sleepメソッドと呼ばれています。

上述したように、シングルスレッドとマルチスレッドの2つの方法があります。

どんなときにsleepメソッドを使うのか

Tread sleepメソッドはどんなときに必要となるのでしょうか。例えば、待ち時間があった方が都合の良い場合、Tread sleepメソッドを使うことで利便性が上がります。

ユーザーの入力待ち、または実行を一定時間過ぎてから行いたい場合などが挙げられます。また、他のスレッドの終了を待ってからでないと進行できないような場合も待ち時間が必要です。

Tread sleepメソッドによってCPUの消費を節約することができるので、省エネルギーにもなります。ゲームを楽しむときも、ペースに合わせるためにsleep機能を役立たせることもできます。

マルチメソッド

マルチメソッドでは、Treadクラスを継承するクラスを作成したあと、runメソッドを実行する流れになります。

Treadクラスを継承したクラス(設計図)では、インスタンスと呼ばれる、メモリ上のデータや手続きであるオブジェクトを作成します。わかりやすく言うと、設計図に基づいて実際に作ったモノ(オブジェクト)のことです。

インスタンス作成後、そのインスタンスに対してstartメソッドを実行する、といった流れになります。

Java sleep のコード作成


ここでは基本的なJava sleepのサンプルコードをご紹介します。停止時間の指定ですが、1秒は1,000ミリ秒として記述する決まりなので、10秒であれば1万ミリ秒になります。

例えば、1秒止めたければ、()内に(1000)と記述し、10秒であれば(10000)と記述します。

サンプルコードの基本構文と停止時間の指定

5秒止めたい場合は、次のような記述をします。


また、基本構文は


となります。

その後


の部分で、止める時間をミリ秒で指定しています。

ここでは5秒止める記述をします。


try {
Thread.sleep(5000);

と記述することで、スレッド1を5秒止めることができます。

サンプルコードと結果

5秒停止するサンプルコードを以下に表示します。


このコードでは「スレッド1」が表示されてから5秒停止して「スレッド2」の表示が遅れて表される結果になります。

後述で詳しく説明しますが、例外を発生させる可能性があるため、あらかじめ予想される例外を定義する必要があります。このサンプルコードでは 「InterruptedException」という例外を定義して記述しています。

また、「5000」は、5,000ミリ秒=5秒待つという意味になっています。実行結果は5秒後に


が処理されます。

Java sleepの注意点と例外処理

Java sleepでは、スレッドの一時停止中に、他のメソッドが割り込むという例外が発生することがあります。

これを防ぐためにはtry-catchと呼ばれる例外処理を使う必要があります。この処理を行うことで、通常通りの動作を可能にします。前述したサンプルコードの中にもtry-catchの処理があります。改めて以下の記述を確認しましょう。

・try{ に問題があるかを確かめたいコードを入力します。
・catch(Exceptione){ には実行中に例外が起きた場合に処理するコードを記入します。

これにより、例外が起こる可能性のあるコードに対する例外処理を実行し、プログラムの強制終了を防ぎます。

Java sleepの注意点

Java sleep機能を利用する際には、他にも注意点があります。例えば、「Tread」と記述するところを「tread」と、最初の「T」を小文字の「t」で入力してしまうといったミスをしがちです。この場合、実行できなくなるので気を付けましょう。

他にも、sleepメソッドで停止後、プログラムが実行されるまで待たなくてはならないため、停止時間に誤差が起こる可能性があることも覚えておきましょう。

もう1つのJava sleep機能 TimeUnit

Javaでは、もう1つのsleep機能が使えます。TimeUnitという方法で、可読性が高いという特徴により、Tread sleepより使い易いのが特徴です。秒、ミリ秒、マイクロ秒、ナノ秒といった単位ごとに明示できるのがメリットです。以下の書式が使えます。


SE
Javaのsleepの機能であるTread sleep メソッドの使い方や使用の注意点などが理解できました。
PM
Tread sleep メソッドは便利な機能なので、この機会に使い方を覚えておきましょう。

Java sleepについて知っておこう


Java sleepの機能である、Tread sleep メソッドの基本を知って、Javaで一時停止の動作を可能にする使い勝手の良いプログラムを作成してみましょう。何かと便利に使えるようになるでしょう。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

recommended

Categories

Tags