Java中的多線程程序設計

Java對多線程的支持:

    通常情況下,對多線程的支持都是由操作系統提供相應的接口來實現的(即由操作系統來提供對線程的調用和管理),而Java是第一個在語言級上支持多線程的語言,這就是說在Java虛擬機內部自己要實現一個線程調度管理器,這個調度器可以實現對Java程序中的線程進行管理,這樣無論虛擬機所在的操作系統是否支持,Java語言都是支持多線程的。
    但是,這個java虛擬機自己實現的線程調度器的功能並不是很強大,他只支持搶佔式的進程調度,即優先級高的進程總是獲得執行的機會,並且高優先級的進程可以隨時剝奪正在運行的低優先級進程運行的權力,而對於通常的時間片輪換這個線程調度器本身是不支持的。

注意:我們不可以完全依靠在Java中高優先級線程永遠執行的特點來實現某些功能,因爲有的時候一個長時間得不到運行的線程也有可以被線程調度器,調起運行!

在Java中實現多線程的三種方式:

(一)繼承Thread類:

1.定義一個類作爲一個新的類A,要求其繼承自Thread類;
2.在類A中覆蓋Thread類的Run方法;
3.在要啓動線程的地方,new一個類A的對象a表示一個新的線程,調用對象a的start方法來啓動這個線程。

(二)實現Runnable接口:

1.定義一個類A要求其實現Runnable接口;
2.在類A中覆蓋Runnable接口中的Run方法;
3.在要啓動線程的地方,new一個Thread類的對象B表示一個新的線程,並將一個類A的對象a作爲參數傳給B的構造函數,這樣這個B(新的線程)的Run方法的行爲就由類A的Run方法控制,最後調用B的start方法啓動這個線程。

(三)使用內部類:

1.定義一個新的類Outer;
2.在這個類Outer的內部定義一個內部類Inner(可以是私有的),Inner要繼承自Thread類或實現Runnable 接口;
3.Outer要提供一個方法,如getThread()來返回一個Inner的對象;
4.在要啓動線程的地方,同上兩種方法。

三種方式的比較:
方式一:最直觀好理解的方式,但不常用!
方式二:只要新的線程類不需要就給Thread類的其他方法,最好用這種方式,他可以方便的實現多個線程對同一資源的共享,因爲這時這幾個線程都是同一個類的對象。
方式三:在這個新的線程類同時還要繼承其他類(Java不支持多繼承)和實現其他接口時可以使用,並且也能完成訪問同一資源!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章