前言
本來想著給自己放鬆一下,刷刷部落格,突然被幾道面試題難倒!說說Java中實現多執行緒有幾種方法?似乎有點模糊了,那就大概看一下面試題吧。好記性不如爛鍵盤
*** 12萬字的java面試題整理 ***
Java中實現多執行緒有幾種方法
建立執行緒的常用三種方式:
- 繼承Thread類
- 實現Runnable介面
- 實現Callable介面( JDK1.5>= )
- 執行緒池方式建立
透過繼承Thread類或者實現Runnable介面、Callable介面都可以實現多執行緒,不過實現Runnable介面與實現Callable介面的方式基本相同,只是Callable介面裡定義的方法返回值,可以宣告丟擲異常而已。因此將實現Runnable介面和實現Callable介面歸為一種方式。這種方式與繼承Thread方式之間的主要差別如下。
採用實現Runnable、Callable介面的方式建立執行緒的優缺點優點:
優點:執行緒類只是實現了Runnable或者Callable介面,還可以繼承其他類。這種方式下,多個執行緒可以共享一個target物件,所以非常適合多個相同執行緒來處理同一份資源的情況,從而可以將CPU、程式碼和資料分開,形成清晰的模型,較好的體現了物件導向的思想。
缺點:程式設計稍微複雜一些,如果需要訪問當前執行緒,則必須使用 Thread.currentThread() 方法
採用繼承Thread類的方式建立執行緒的優缺點
優點:編寫簡單,如果需要訪問當前執行緒,則無需使用 Thread.currentThread() 方法,直接使用
this即可獲取當前執行緒
缺點:因為執行緒類已經繼承了Thread類,Java語言是單繼承的,所以就不能再繼承其他父類了。