C 多執行緒之旅 7 終止執行緒

2022-01-10 10:07:22 字數 2045 閱讀 2542

先交代下背景,寫《c#多執行緒之旅》這個系列文章主要是因為以下幾個原因:1.多執行緒在c/s和b/s架構中用得是非常多的;2.而且多執行緒的使用是非常複雜的,如果沒有用好,容易造成很多問題。

c#多執行緒之旅目錄:

c#多執行緒之旅(1)——介紹和基本概念

c#多執行緒之旅(2)——建立和開始執行緒

c#多執行緒之旅(3)——執行緒池

c#多執行緒之旅(4)——apm初探

c#多執行緒之旅(5)——同步機制介紹

c#多執行緒之旅(6)——詳解多執行緒中的鎖

c#多執行緒之旅(7)——終止執行緒

當我們想要立即終止乙個執行緒時,可以用呼叫thread.abort方法來終止執行緒。這個和協作式取消不一樣。

例子:名稱

**計算限制的

操作

public class threadwork

}catch (threadabortexception e)

finally

tool.writemessage("thread - still alive and working.", consolecolor.green, consolecolor.white);

thread.sleep(1000);

tool.writemessage("thread - finished working.", consolecolor.green, consolecolor.white);}}

主程式

public class threadaborttest

catch(exception ex)

console.readkey();}}

工具類

public static class tool

}

(1)呼叫thread.abort()的輸出結果:

(2)未呼叫thread.abort()輸出結果:

(3)流程:

(1)當主線程呼叫mythread.abort()後,執行緒mythread丟擲異常,執行緒mythread捕獲到異常

(2)在mythread catch塊中

如果呼叫thread.resetabort()-----

step1.取消終止執行緒的請求,並恢復執行緒,繼續執行resetabort後面的語句,然後執行catch塊之後的語句

step2.若catch塊之後有finally塊,則執行執行finally塊,然後執行finally塊後面的語句。

如果沒有呼叫thread.resetabort()----

當呼叫執行緒的abort方法時,不能保證執行緒立即終止,有可能永遠不能終止。這種情形發生在catch或finally塊中存在長時間或無限的耗時操作時。

只有當catch或finally塊中**執行完才能終止執行緒。所以我們可以呼叫執行緒的join方法來等待執行緒的完成或終止。

應用程式將會被終止,finally塊不會被執行

應用程式將會被終止

執行緒會在start被呼叫時終止執行緒。

執行緒被中斷,然後終止執行緒

執行緒被中斷,然後終止執行緒

throw threadstartexception 引發abort的呼叫,然後abortrequested 被加到正在被終止的執行緒的threadstate屬性

threadabortexception不會被丟擲直到執行緒返回託管**。

作  者:jackson0714

出  處:

一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!

Linux多執行緒之執行緒終止

呼叫 return void var 呼叫void pthread exit void value ptr 其它執行緒可以呼叫 pthread join 獲得這個針。注 如果 thread 執行緒通過 return 返回,value ptr 所指向的單元裡存放的是 thread 執行緒函式的返回值。...

C 多執行緒之旅 3

閱讀目錄 一 介紹 二 通過tpl進入執行緒池 三 不用tpl進入到執行緒池 v部落格前言 先交代下背景,寫 c 多執行緒之旅 這個系列文章主要是因為以下幾個原因 1.多執行緒在c s和b s架構中用得是非常多的 2.而且多執行緒的使用是非常複雜的,如果沒有用好,容易造成很多問題。v寫在前面 多執行...

Python多執行緒之執行緒建立和終止

python主要是通過thread和threading這兩個模組來實現多執行緒支援。python的thread模組是比較底層的模組,python的threading模組是對thread做了一些封裝,可以更加方便的被使用。但是python cpython 由於gil的存在無法使用threading充分...