实现多线程的3种方式
1)??繼承Thread類,重寫run()方法。
Thread類本質上也是實現了Runnable接口的一個實例,它代表一個線程的實例。并且,啟動線程的唯一方法就是通過Thread類的start()方法。start()方法是一個本地方法,它將啟動一個新線程,并執行run()方法(Thread類中的run()方法是一個空方法)。這種方式通過自定義直接extend Thread,并重寫run()方法,就可以啟動新線程并執行自己定義的run()方法。需要注意的是,調用start()方法后并不是立即執行多線程代碼,而是使得該線程變為可運行狀態,什么時候運行多線程代碼是由操作系統決定的。
2)??實現Runnable接口,并實現該接口的run()方法
主要步驟如下:
A.??自定義類并實現Runnable接口,實現run()方法;
B.??創建Thread類對象,用實現Runnable接口的對象作為參數實例化該Thread類對象。
C.??調用Thread類的start()方法。
其實,不管是通過繼承Thread類還是通過實現Runnable接口來實現多線程的方法,最終還是通過Thread類對象的API來控制線程的。
3)??實現Callable接口,重寫call()方法
Callable接口實際上是屬于Executor框架中的功能類,Callable接口和Runnable接口的功能類似,但提供了比Runnable接口更強大的功能,主要表現為以下3點:
A.??Callable可以在任務結束后提供一個返回值,Runnable無法提供這個功能。
B.??Callable中的call()方法可以拋出異常,而Runnable的run()方法不能拋出異常。
C.??運行Callable可以拿到一個Future對象,Future對象表示異步計算的結果,他提供了檢查計算是否完成的方法。由于線程屬于異步計算模型,因此無法從別的線程中得到函數的返回值,在這種情況下,就可以使用Future來監視目標線程調用call()方法的情況,當調用Future中的get()方法以獲取結果時,當前線程就會阻塞,直到call()方法結束返回結果。
實現多線程的幾種方式,建議使用Runnable接口實現,因為java開發人員認為,一個類僅在他們需要被加強或者修改時才會被繼承,所以如果沒有必要重寫Thread類中的其他方法,,那么通過繼承Thread類的實現方式和實現Runnable接口的效果相同,優先推薦Runnable接口。不管如何最終都需要thread.start( )來啟動線程。
總結
以上是生活随笔為你收集整理的实现多线程的3种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vivo服务器最新版本,vivo服务安全
- 下一篇: GAMS-01 实用注释命令