Java Threads Programming - MyDaemon.java
Java程式語言中提供了二種方法來撰寫Thread程式:
1. extents java.lang.Thread class
2. implements java.lang.Runnable interface
由於Java程式語言採用類別單一繼承方式,如果我們的類別已經繼承某個類別,那麼就不能再繼承Thread類別,也就是說,繼承了Thread類別,就不能再繼承其它類別。因此,還可以利用第二種方式來實現Thread功能,此方式需實作在Runnable介面中定義的run()方法,然後在new一個Thread物件時,傳入一個實作Runnable介面的物件作為引數,Thread物件會利用Runnable物件的run()方法,進而執行當中所定義的程式碼。所以,基本上是建議以實作Runnable的方式讓物件具有執行緒功能,也保留日後修改的彈性,而且利用Runnable介面來撰寫執行緒,程式較有一致性,當其他程式要用到時,可以有共同介面的標準,也比較符合OO的精神。
使用Runnable方式的程式碼如下:
Daemon.java
public abstract class Daemon implements Runnable {
protected Object executeObject = null;
Thread thread = null;
public Daemon(Object executeObject) {
this.executeObject = executeObject;
thread = new Thread(this);
}
public void run(){
doRun();
}
public abstract void doRun();
public void terminate() {
doTerminate();
}
public void doTerminate(){
}
public void start(){
thread.start();
}
public void stop() {
thread.interrupt();
}
}
MyDaemon.java
public class MyDaemon extends Daemon {
public MyDaemon(Object executeObject) {
super(executeObject);
// TODO Auto-generated constructor stub
}
@Override
public void doRun() {
// TODO Auto-generated method stub
SomeJob object = (SomeJob) this.executeObject;
object.run();
}
}
SomeJob.java
public class SsomeJobThread {
private int var1;
public void run() {
// do something ...
}
public int getVar1() {
return var1;
}
public void setVar1(int Var1) {
this.Var1 = var1;
}
}
呼叫方法如下:
SomeJob job = new SomeJob();
job.setVar1(123);
MyDaemon daemon = new MyDaemon(job);
daemon.start();
這個Daemon物件會自動幫我產生一個thread去執行我定義的工作,執行完後就自動消失了,不錯吧!
0 意見:
張貼留言