new Thread(new Runnable(){})

一、寫法介紹

JAVA是面向對象的,也就是說,對于一個方法等,它需要什么類型的對象,只要傳入就可以了。

像這里,Thread類的構造方法中,需要一個實現了Runnable接口的對象,而new就是生成了個Runnable接口下的一個實例對象。

同等與這種寫法,實例化了一個Runnable接口子類的實例

Thread t

=

new

Thread

(

new

MyRunnable

(

)

)

;

public

class

MyRunnable

implements

Runnable

{

@Override

public

void

run

(

)

{

//具體實現

}

}

12345671234567

看起來是直接new一個接口,實際上是匿名內部類

因為接口不能實例化,new Runnable()是一個實現接口Runnable的類的對象,后面的run方法是該類里實現的方法,這就是匿名內部類的寫法

二、匿名內部類

匿名內部類也就是沒有名字的內部類

正因為沒有名字,所以匿名內部類只能使用一次,它通常用來簡化代碼編寫

但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個接口

這里正是實現Runnable接口的簡化代碼

那么這里用到的Runnable接口是什么?

三、多線程

Java中,線程創建有三種方法:

1. 實現Runnable接口的run方法

public

class

RunableTest

{

//繼承Thread類并重寫run方法

public

static

class

RunableTask

implements

Runnable

{

@Override

public

void

run

(

)

{

System

.

out

.

printlan

(

"I am a child theread"

)

;

}

}

public

static

void

mian

(

String

[

]

args

)

throws

InterruptedException

{

//創建線程

RunableTask task

=

new

RunableTask

(

)

;

//啟動線程

new

Thread

(

task

)

.

start

(

)

;

new

Thread

(

task

)

.

start

(

)

;

}

}

12345678910111213141516171234567891011121314151617

2. 繼承Thread類并重寫run方法

public

class

ThreadTest

{

//繼承Thread類并重寫run方法

public

static

class

MyThread

extends

Thread

{

@Override

public

void

run

(

)

{

System

.

out

.

printlan

(

"I am a child theread"

)

;

}

}

public

static

void

mian

(

String

[

]

args

)

{

//創建線程

MyThread thread

=

new

MyThread

;

//啟動線程

thread

.

start

(

)

;

}

}

123456789101112131415123456789101112131415

3. 使用FutureTask方式

public

class

FutureTest

{

//創建任務類,類似Runnable

public

static

class

CallerTask

implements

Callable

<

String

>

{

@Override

public

String

call

(

)

throws

Exception

{

return

"hello"

}

}

public

static

void

mian

(

String

[

]

args

)

throws

InterruptedException

{

//創建異步任務

FutureTask

<

String

>

futureTask

=

new

FutureTask

<

>

(

new

CallerTask

(

)

)

;

//啟動線程

new

Thread

(

futureTask

)

.

start

(

)

;

try

{

//等待任務執行完畢,并返回結果

String result

=

futureTask

.

get

(

)

;

System

.

out

.

println

(

result

)

;

}

catch

(

ExecutionException

e

)

{

e

.

printStackTrace

(

)

;

}

}

}

1234567891011121314151617181920212212345678910111213141516171819202122

所以這里實際上是通過實現Runnable接口的run方法去創建多線程。并new了一個線程對象。

免責聲明:本文僅代表文章作者的個人觀點,與本站無關。其原創性、真實性以及文中陳述文字和內容未經本站證實,請讀者僅作參考,并自行核實相關內容。如發現有害或侵權內容,請聯系郵箱:jubao@pinlue.com,我們將在第一時間進行核實處理。

http://image95.pinlue.com/image/97.jpg
分享
評論
首頁
暖暖高清在线观看视频桃花社区视频在线观看播放