多執行緒基礎(建立,使用,中斷等等)

2021-10-03 07:41:54 字數 3836 閱讀 3506

建立執行緒常用的有兩種方式

1,繼承thread類來建立執行緒類。

2,實現 runnable 介面 。

建立執行緒-方法1-繼承 thread類

可以通過繼承 thread 來建立乙個執行緒類,該方法的好處是 **this 代表的就是當前執行緒,**不需要通過 thread.currentthread() 來獲取當前執行緒的引用。

**如下:

/**

* 描述:繼承thread類來建立執行緒類

*/public

class

main

}class

mythread

extends

thread

}

建立執行緒-方法2-實現 runnable 介面通過實現 runnable 介面,並且呼叫 thread 的構造方法時將 runnable 物件作為 target 引數傳入來建立執行緒物件。 該方法的好處是可以規避類的單繼承的限制;但需要通過 thread.currentthread() 來獲取當前執行緒的引用。

/**

* 描述:繼承thread類來建立執行緒類

*/public

class

main

}class

mythread

implements

runnable

}

thread 的常見構造方方法

thread類 常見方法

id:是執行緒的唯一標識,不同執行緒不會重複

名稱:是各種除錯工具用到

狀態:表示執行緒當前所處的乙個情況

優先順序:高的執行緒理論上來說更容易被排程到 關於後台執行緒,需要記住一點:jvm會在乙個程序的所有非後台執行緒結束後,才會結束執行。 是否存活,即簡單的理解,為 run 方法是否執行結束了。

常見的有以下兩種方式:

通過共享的標記來進行溝通

呼叫 interrupt() 方法來通知

通過共享的標記來實現中斷

就是建立乙個boolean型別的變數來控制迴圈是否進行,就是乙個標記。

**如下:

/**

* 描述:標記法中斷執行緒

*/public

class

threaddemo

catch

(interruptedexception e)}}

}public

static

void

main

(string[

] args)

throws interruptedexception

}

這個也是標記法實現的呼叫thread.interrupt()和thread.interrupted()方法返回的是boolean型別的資料,

/**

* 描述:呼叫thread.interrupt()和thread.interrupted()方法

*/public

class

thread2

catch

(interruptedexception e)}}

}public

static

void

main

(string[

] args)

throws interruptedexception

}}

呼叫 interrupt() 方法來通知

這種方式通知收到的更及時,即使執行緒正在 sleep 也可以馬上收到
通過 thread 物件呼叫 interrupt() 方法通知該執行緒停止執行

thread 收到通知的方式有兩種:

1). 如果執行緒呼叫了wait/join/sleep 等方法而阻塞掛起,則以 interruptedexception異常的形式通知,並清除中斷標誌

2). 只是內部的乙個中斷標誌被設定,thread 可以通過

(1). thread.interrupted() 判斷當前執行緒的中斷標誌被設定,清除中斷標誌。

(2). thread.currentthread().isinterrupted() 判斷指定執行緒的中斷標誌被設定,不清除中斷標誌。

**如下:

1,呼叫sleep方法產生異常,從而中斷執行緒

/**

* 描述:呼叫sleep方法產生異常,從而中斷執行緒

*/public

class

threadinterrupt

catch

(interruptedexception e)

for(

int i =

0; i <

10; i++)}

}public

static

void

main

(string[

] args)

throws interruptedexception

}

2,(1),呼叫thread.interrupted()

/**

* 描述:呼叫了thread.interrupted()會標誌位清除

*/public

class

threadde}}

public

static

void

main

(string[

] args)

throws interruptedexception

}

呼叫了thread.interrupted()會標誌位清除

2,呼叫thread.currentthread().isinterrupted()

/**

1. 描述:呼叫thread.currentthread().isinterrupted()標誌位不會清除

*/public

class

threaddem}}

public

static

void

main

(string[

] args)

throws interruptedexception

}

呼叫thread.currentthread().isinterrupted()標誌位不會清除

多執行緒 執行緒中斷

設計思路 1,新建乙個執行緒,其啟動引數是要輸出其執行狀態。2,中斷主線程若干秒,讓新建執行緒持續運作。3,中斷新建執行緒,輸出起執行次數和執行狀態。int count 0 thread t2 new thread catch threadabortexception absortexception...

多執行緒基礎篇(2) 理解中斷

執行緒中斷,可以理解為乙個現成的標識屬性,它表示乙個執行中的執行緒是否被其他執行緒進行了中斷操作,中斷可以用來進行強制終結執行緒 使執行緒進入終止狀態 即在執行run方法過程中直接退出 或者說跳過某段 執行緒中斷的方法 1 stop 方法 不在使用此方法,其中斷線程是立即中斷的,即使是在同步 塊中對...

多執行緒基礎篇(2) 理解中斷

執行緒中斷,可以理解為乙個執行緒的標識屬性,它表示乙個執行中的執行緒是否被其他執行緒進行了中斷操作,中斷可以用來進行強制終結執行緒,即在執行run方法過程中直接退出 或者說跳過某段 執行緒中斷的方法 1 stop 方法 不在使用此方法,其中斷線程是立即中斷的,即使是在同步 塊中對資料進行操作時也會立...