スレッド機能を提供するクラス。
これをextendsして新たなクラスを定義し、その中にマルチスレッドで実行したい処理を用意する。
class クラス extends Thread{
public void run(){
マルチスレッドで実行する処理
}
}
変数 = new クラス()
変数.start();
・Runnableインターフェイス
スレッド機能を提供するインターフェイス。
これをimplementsしたクラスを用意し、その中にマルチスレッドで実行したい処理を用意する。
class クラス implements Runnable{
public void run(){
マルチスレッドで実行する処理
}
}
変数 = new Thread(this)
変数.start();
・「threadクラス」と「Runnableインターフェイス」の違い
「threadクラス」はインスタンスの作成のみ
「Runnableインターフェイス」は「new Thread」としてスレッドインスタンスを作成し、その引数にrunを含むインスタンスを指定する
例.
public class MultiAPP extends Frame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
Button b1;
Panel p1;
int num =1;
public static void main(String[] args) {
new MultiAPP();
}
public MultiAPP(){
this.setSize(300,200);
p1 = new Panel();
this.add(p1,BorderLayout.CENTER);
b1 = new Button("Click");
b1.addActionListener(this);
this.add(b1,BorderLayout.SOUTH);
this.setVisible(true);
}
public void actionPerformed(ActionEvent ev){
p1.setLayout(new GridLayout(num++,1));
Random rnd = new Random();
TimeLabel tl1 = new TimeLabel();
tl1.end = rnd.nextInt(90) + 10;
tl1.delay = rnd.nextInt(2500) + 500;
p1.add(tl1);
p1.doLayout();
}
}
class TimeLabel extends Label implements Runnable {
int num = 0;
int end = 100;
int delay = 1000;
boolean kiss_of_death = false;
TimeLabel(){
this.setText("count: 0");
this.setFont(new Font("SansSerif",Font.BOLD,18));
this.setForeground(Color.blue);
new Thread(this).start();
}
public void run(){
while(!kiss_of_death){
this.setText("count: " + num++);
if(num == end){
num=0;
}
try{
Thread.sleep(delay);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}
解説
・new Thread(this).start();
startすることによりrunスレッドが新スレッドで実行される。
0 件のコメント:
コメントを投稿