要想讓對象能具有多線程功能,只需要繼承java.lang.Thread類或是實現java.lang.Runnable接口。Java的線程是通過java.lang.Thread類來實現的。當生成一個Thread類對象之後,一個新的線程就產生了。通過該實例對象可以啟動、終止、掛起線程等。它的構造方法如下:
public Thread(ThreadGroup group,Runnable target,String name);
第一個參數是線程所屬的線程組;target是實際執行線程體的目標對象,它必須實現接口Runnable;name是線程名
此外,當某個參數為null時,有下面的幾個方法
public Thread();
public Thread(Runnable target);
public Thread(Runnable target,String name);
public Thread(String name);
public Thread(ThreadGroup group,Runnable target);
public Thread(ThreadGroup group,String name);
任何實現接口Runnable的對象都可以作為一個線程的目標對象。Thread類本身也實現了接口Runnable,因此可以通過兩種方法實現線程體:
(1)、定義一個線程類,繼承Thread類並重寫其中的run()方法。這時在初始化這個類的實例時,target可為null,表示由這個實例對象來執行。
class ComputerSum{
int sum;
public void setSum(int n){
sum=n;
}
public int getSum(){
return sum;
}
}
class People extends Thread{
int timeLength;
ComputerSum CS;
People(String s,int timeLength,ComputerSum sum){
setName(s);//調用Thread類的setName()
this.timeLength=timeLength;
CS=sum;
}
public void run(){
for(int i=1;i<=5;i++){
int m=CS.getSum();
CS.setSum(m+1);
System.out.println("我是"+getName()+",和:"+CS.getSum());
}
try{
sleep(timeLength);
}catch(InterruptedException e){}
}
}
public class ChildThread{
public static void main(String args[]){
People teacher,student;
ComputerSum sum=new ComputerSum();
teacher=new People("老師",200,sum);
student=new People("學生",200,sum);
teacher.start();
student.start();
}
}
(2)、提供一個實現接口Runnable的類作為一個線程的目標對象,在初始化一個Thread類或者Thread子類的線程對象時,把目標傳給這個線程實例,由該目標對象提供線程體run()。
class A implements Runnable{
Thread th;
A(){
th = new Thread(this, "Demo Thread");
}
public void run(){
System.out.println("class A實現了Runnable接口,並且還可以繼承別的類");
}
}
public class RunnableThread{
public static void main(String args[]){
A a= new A();
a.th.start();
System.out.println("這是主線程");
}
}