關於多執行緒的建立,及區別

2021-10-20 09:30:46 字數 2008 閱讀 8385

建立執行緒有三種方式

1.繼承thread

2.實現runnable介面

3.實現callable介面

.繼承thread,重寫run方法,用start啟動,(呼叫start()方法與run()方法的區別:呼叫run不會起新的執行緒,呼叫start會啟用新的執行緒)

/**

* 執行緒任務類

* 建立執行緒的三種方法一

* 繼承thread類,重寫run方法,用start啟動

*/public class testthreadone extends thread

}public static void main(string args)

}

二.實現runnable介面,重寫run方法,用start方法啟動

/**

* 執行緒任務類

* 建立執行緒三種方法二

* 實現runnable介面來建立執行緒

* 1.實現runnable介面,並重寫run方法

* 2.建立乙個任務類的物件

* 4.用start起訂執行緒

* 注:

* 變數隔離

* 鎖

* */

public class testthreadtwo implements runnable

@override

public void run()

}}

三.實現callbale介面重寫call方法,且利用futuretask

/**

* 執行緒任務類

* 建立執行緒三種方法三

* 1.建立乙個任務類,實現callable介面,並實現call()方法,call()方法中的內容就是需要執行緒完成任務,且有返回值

* 2,建立乙個任務類的物件,並使用futuretask類來包裝任務類的物件,該futuretask物件封裝了任務類物件中call()方法的返回值

* 4,呼叫thread執行緒類物件的start()方法,來起訂乙個執行緒。

* 5,呼叫futuretask類物件的get()方法來獲取執行緒執行的返回值,即人物類物件call()方法的返回值

*/public class testthreadthree implements callable

return i;

}public static void main(string args) catch (exception e)

}}

三種方法比較:

1.繼承thread類的方法:

優點:編寫容易,任務類中訪問當前執行緒可以使用this關鍵字

缺點:任務類即執行緒類已經繼承了thread類,所以不能再繼承其他父類

2.實現runnable介面的方式:

優點:任務類只實現了runnable介面,還可以繼承其他類,可以多個執行緒物件共享乙個任務類物件,即多執行緒共享乙份資源的情況下

缺點:編寫稍微複雜,任務類中訪問當前執行緒,必須使用thread.currentthread()方法

3.實現callable和future的方式

優點:任務類只是實現了callable介面,還可以繼承其他類,同樣多執行緒下可以共享乙份資源,這種方式還有返回值,並且可以丟擲返回值的異常

缺點:編寫複雜,任務類中訪問當前執行緒時,必須使用thread.currentthread()方法

總結:僅僅只重寫run()方法,而不是重寫thread類其他方法的前提下,比較推薦實現runnable介面的方式建立執行緒

因為不僅修改或者增強類的能力,不應該為其建立子類,而且實現runnable介面的方式,執行緒和資源相對分離,程式更加健壯,更符合物件導向的變成思想,當然,需要執行緒有返回值時可以使用callable的方式,但callable的方式有乙個問題,當呼叫get()方法時,如果執行緒還未執行完畢則會阻塞到執行緒執行完畢拿到返回值

關於多執行緒的建立

import com.sun.deploy.ref.helpers public class duoxianceng static class helper implements runnable private void dosomething string message override pu...

多執行緒講解及建立

經過總結,python建立多執行緒主要有如下兩種方法 接下來,我們就來揭開多執行緒的神秘面紗。在python3中,python提供了乙個內建模組threading.thread,可以很方便地讓我們建立多執行緒。threading.thread 一般接收兩個引數 import time from th...

Spring Boot 建立及使用多執行緒

4.基於 async返回值的呼叫 refspring是通過任務執行器 taskexecutor 來實現多執行緒和併發程式設計,使用threadpooltaskexecutor來建立乙個基於線城池的taskexecutor。在使用執行緒池的大多數情況下都是非同步非阻塞的。我們配置註解 enableas...