2008年6月13日 星期五

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去執行我定義的工作,執行完後就自動消失了,不錯吧!

Read more...

2008年6月8日 星期日

台北七星山主峰

不知道什麼原因,突然大家約一約要去爬七星山,到了陽明公園後,做個簡單的暖身後就開始攻頂了。經過了一個小時的埋頭苦幹,終於到了七星山主峰,由於當日天氣不錯,居然可以看見遠方的雲海。






Read more...

  © Blogger template Spain by Ourblogtemplates.com 2008

Back to TOP