マルチスレッド(並行処理)とは?
マルチスレッドを使うと以下の事ができます。
・並行処理をすることにより処理を分散させ1スレッドに処理を集中させないことができる。
・同時に処理を行うことができ、常に文字の入力を受け付けて、バックアップ処理を行うなどと言うことが可能になる。
以上のことがマルチスレッドにより可能になります。
上の例はあくまでも例になるため、他にあるかもしれませんがあくまでも例として捉えてください。
マルチスレッド解説
まずマルチスレッドを使うには、マルチスレッドとして動かすために新しくクラスを作る必要があります。
そして作ったクラスではThreadを継承(extends)します。
まあ継承がわからないよって方はそのまま下を見てもらえばなんとなくわかると思います。
マルチスレッドを使った場合のクラスのコードはこうなります。
package test;
public class Multi extends Thread {
public void run() {
//ここにマルチスレッドで処理する内容を記述
}
}
これはあくまでも例ですが、マルチスレッドで処理する内容をrunメゾッドの中に記述します。
解説していきます。
先程言ったように、マルチスレッドで処理する内容を含むクラスではThreadを継承します。
継承の記述はクラスの宣言をするところに記載します。
その後、マルチスレッドで起動するメゾッドは必ずpublic void run()としてください。
これは決まり文句なので覚えてください。
それ以外は普通にマルチスレッドで処理したい内容をrunメゾッドの中に記述していくだけです。
マルチスレッドの起動方法
マルチスレッドを呼び出す(起動させる)にはいつものように、クラス名.メゾッド名では起動することができません。
では起動方法を記載します。
Multi multi = new Multi();
multi.start();
で起動することができます。
解説していくと
一行目には先程の工程のものを書いたクラス名 そのクラスの変数名 = new 先程の工程のものを書いたクラスを記載します。
先程のクラス名は”Multi”というクラスなので、最初にMultiを指定しました。
2行目は上で宣言した変数名.start();マルチスレッドを起動させることができます。
今回の場合は上でmultiという変数で宣言しているのでmulti.start();で起動することができます。
変数名.start();は決まり文句なので、覚えてください。
Timerについて
Timerのコードは以下になります。
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
//定期的に実行したい処理
}
};
timer.scheduleAtFixedRate(task,60 * 30 * 1000,60 * 30 * 1000);
以上で定期的に処理を行うことができます。
Timerでは特に解説することはありませんが、解説するとすれば最終行ですね。
最終行を解説します。
一番上のTimerで宣言した変数名.scheduleAtFixedRate(TimerTaskで宣言した変数名,呼び出してから最初に処理をする時間,最初以降からの処理間隔時間)
で起動することができます。
最終行は処理間隔の設定ですね。
呼び出してから最初に処理する時間のところになぜ計算式の60 * 30 * 1000という計算式が入っているのかと言うと、このtimerでは時間指定がミリ秒になっています。
1ミリ秒は1秒の千分の一なので、最後にかける1000をしています。そうすることによって秒数で指定をすることができます。
上の例では30分ごとのTimerになっています。
これでわかった方もいるかも知れませんが、60 * 30というのは1分は60秒なので1分ごとの指定にしてます。
さらに30分ごとに処理を行いたいので、現在1分指定になってるものに30をかけて30分ごとに処理をしています。
最初以降の処理時間も上と同じ指定になっているのは、上と同じ理由です。
最初に処理する時間と、最初以降に処理する時間は違っても大丈夫です。
Timerの呼び出し方については、メゾッドの中に記載するので、メゾッド呼び出せばTimerを起動することができます。
コメント