要想讓對象能具有多線程功能,只需要繼承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("這是主線程"); } }