しかし現実のPCとかはブラウザやOficeソフトを同時に使用できる。この機能のことを「マルチスレッド」といいJavaでも
- インタフェイスRunnableを実装する
- Threadクラスを継承する
の2通りのマルチスレッド機能が用意されています。
■実装方法
スレッドの場合メソッド呼び出しが特殊で以下の順で呼び出されます
①スレッドオブジェクト生成
②start()メソッド実行
③start()メソッドからrun()メソッドが呼び出される
/*インタフェイスの記述*/
public class クラス名 implements Runnable{
public static void main(String [] age){
クラス名 t1 = クラス名();//自クラスオブジェクトを2つ生成
クラス名 t2 = クラス名();//
t1.start();
t2.start();
}
public void run(){
スレッド処理
}
}
インタフェイスのパターンの利点はGUIなどAPIのクラスにスレッドを利用できるところです
■サンプルプログラム
class ThreadClass extends Thread{
ThreadClass(String name){
super(name);
}
public synchronized void run(){
for(int i=0; i<=10;i++){
try{
System.out.println(getName() + ":" + i);
sleep(6000);
}catch(InterruptedException ex){
}
}
}
}
public class MainClass{
public static void main(String [] age){
ThreadClass t1 = new ThreadClass("^_|_^");
ThreadClass t2 = new ThreadClass("W o W");
ThreadClass t3 = new ThreadClass("T_T//");
t1.start();
t3.start();
t2.start();
}
}
--------
^_|_^:0
W o W:0
T_T//:0
W o W:1
^_|_^:1
T_T//:1
W o W:2
^_|_^:2
T_T//:2
W o W:3
^_|_^:3
T_T//:3
W o W:4
^_|_^:4
T_T//:4
W o W:5
^_|_^:5
T_T//:5
W o W:6
^_|_^:6
T_T//:6
W o W:7
T_T//:7
^_|_^:7
W o W:8
T_T//:8
^_|_^:8
W o W:9
T_T//:9
^_|_^:9
W o W:10
T_T//:10
^_|_^:10
--------
sleep(long)は引数ミリ秒(1000ミリ秒=1秒)の間処理を停止するというもので上のプログラム実行すると6秒間隔で出力されることになる
■synchronized とvolatile
修飾子で触れたこの2つはそれぞれ排他制御を行うもので別スレッドの影響を受けないようにすることができます
--------
sleep(long)は引数ミリ秒(1000ミリ秒=1秒)の間処理を停止するというもので上のプログラム実行すると6秒間隔で出力されることになる
■synchronized とvolatile
修飾子で触れたこの2つはそれぞれ排他制御を行うもので別スレッドの影響を受けないようにすることができます