1. 程式人生 > >建立執行緒有幾種不同的方式?哪一種比較受歡迎?為什麼?

建立執行緒有幾種不同的方式?哪一種比較受歡迎?為什麼?

有三種方式:
①繼承Thread類(真正意義上的執行緒類),是Runnable介面的實現。
②實現Runnable介面,並重寫裡面的run方法。
③使用Executor框架建立執行緒池。Executor框架是juc裡提供的執行緒池的實現。呼叫執行緒的start():啟動此執行緒;呼叫相應的run()方法

繼承於Thread類的執行緒類,可以直接呼叫start方法啟動執行緒(使用static也可以實現資源共享).一個執行緒(物件)只能夠執行一次start(),而且不能通過Thread實現類物件的run()去啟動一個執行緒。

實現Runnable介面的類需要再次用Thread類包裝後才能呼叫start方法。(三個Thread物件包裝一個類物件,就實現了資源共享)。

執行緒的使用的話,注意鎖和同步的使用。(多執行緒訪問共享資源容易出現執行緒安全問題)

一般情況下,常見的是第二種。

  • Runnable介面有如下好處:
    *①避免點繼承的侷限,一個類可以繼承多個介面。
    *②適合於資源的共享
/*
* Thread的常用方法:
* 1.start():啟動執行緒並執行相應的run()方法
* 2.run():子執行緒要執行的程式碼放入run()方法中
* 3.currentThread():靜態的,調取當前的執行緒
* 4.getName():獲取此執行緒的名字
* 5.setName():設定此執行緒的名字
* 6.yield():呼叫此方法的執行緒釋放當前CPU的執行權(很可能自己再次搶到資源)
* 7.join():在A執行緒中呼叫B執行緒的join()方法,表示:當執行到此方法,A執行緒停止執行,直至B執行緒執行完畢,

* A執行緒再接著join()之後的程式碼執行
* 8.isAlive():判斷當前執行緒是否還存活
* 9.sleep(long l):顯式的讓當前執行緒睡眠l毫秒  (只能捕獲異常,因為父類run方法沒有拋異常)
* 10.執行緒通訊(方法在Object類中):wait()   notify()  notifyAll()
*
*設定執行緒的優先順序(非絕對,只是相對機率大些)
* getPriority():返回執行緒優先值
* setPriority(int newPriority):改變執行緒的優先順序
*/