創建線程有2種方法
1繼承Thread類, 該子類應重寫 Thread類的 run 方法
2實現Runnable接口,將類聲明爲 Thread 的子類。有單繼承的侷限性不常用
Thread類概述
該子類應重寫 Thread 類的 run 方法。接下來可以分配並啓動該子類的實例
創建線程的步驟:
1 定義一個類繼承Thread。
2 重寫run方法。
3 創建子類對象,就是創建線程對象。
4 調用start方法,開啓線程並讓線程執行,同時還會告訴jvm去調用run方法。
實現Runnable接口避免了單繼承的侷限性,所以繼承Thread類的方式在這裏不再贅述
Runnable接口概述
Runnable 接口應該由那些打算通過某一線程執行其實例的類來實現。類必須定義一個run 的無參數方法
創建線程的步驟
1、定義類實現Runnable接口。
2、覆蓋接口中的run方法。
3、創建Thread類的對象,將Runnable接口的子類對象作爲參數傳遞給Thread類的構造函數。
4、調用Thread類的start方法開啓線程。
代碼演示:
class Demo implements Runnable
{
privateString name;
Demo(Stringname)
{
this.name= name;
}
//覆蓋了接口Runnable中的run方法。
publicvoid run()
{
for(inti=1; i<=20; i++)
{ System.out.println("name="+name+"..."+Thread.currentThread().getName()+"..."+i);
}
}
}
class ThreadDemo2
{
publicstatic void main(String[] args)
{
//創建Runnable子類的對象。注意它並不是線程對象。
Demo d= new Demo("Demo");
//創建Thread類的對象,將Runnable接口的子類對象作爲參數傳遞給Thread類的構造函數。
Threadt1 = new Thread(d);
Threadt2 = new Thread(d);
//將線程啓動。
t1.start();
t2.start();
System.out.println(Thread.currentThread().getName()+"----->");
System.out.println("HelloWorld!");
}
}
實現Runnable的好處(相對於繼承Thread類)
1. 避免了單繼承的侷限性
2. 線程分爲兩部分,一部分線程對象,一部分線程任務.更加符合面向對象的思想
線程對象調用 run方法和調用start方法區別?
線程對象調用run方法不開啓線程。僅是對象調用方法。線程對象調用start開啓線程,並讓jvm調用run方法在開啓的線程中執行。