天天看點

java多線程并發原理

一.程序

程序是作業系統中運作的一個任務(一個應用程式在一個程序中),程序(process)是一塊包含了某些資源的記憶體區域,作業系統利用程序把它的工作劃分為一些功能單元。程序中包含的一個或多個執行單元稱為線程。程序還有一個私有的虛拟記憶體空間,該空間僅能被它所包含的線程通路。線程隻能歸屬一個程序并且它隻能通路該程序所擁有的資源。當作業系統建立一個程序後,該程序會主動申請一個主線程。

二.線程

一個線程是一個程序的順序執行流。同類的多個線程共享一塊記憶體空間和一組系統資源,線程本身有一個供程式執行時的堆棧。線程在切換時負荷小,是以,線程也被稱為輕負荷程序,一個程序中可以包含多個線程。

三.程序和線程的差別

一個程序至少有一個線程。線程的劃分尺度小于程序,使得多線程程式的并發性高。另外,程序在執行過程中擁有獨立的記憶體單元,而多個線程共享記憶體,進而極大地提高了程式運作效率。線程在執行過程中與程序的差別在于每個獨立的線程有個程式運作入口、順序執行序列和程式出口。但是線程不能獨立執行,必須依存在應用程式中,由應用程式提供多個線程執行控制。從邏輯角度看,多線程的意義在于一個應用程式中,有多個執行部分共同執行一個資源。

java多線程并發原理
小編是一個有着5年工作經驗的java程式員,對于java,自己有做資料的整合,一個完整學習java的路線,學習資料和工具,相信這裡有很多學習java的小夥伴,我創立了一個2000人學習扣群,479121291。每晚都有java的直播課程。無論是初級還是進階的小夥伴小編我都歡迎!

四.并發原理

多個線程“同時”運作隻是我們感觀上的一種表現。事實上線程是并發運作的,作業系統将時間劃分為很多時間段,盡可能的均勻配置設定給每一個線程,擷取到時間片的線程被CPU執行,其他則一直在等待。是以微觀上是走走停停,宏觀上都在運作。這種現象叫并發,但不是絕對意義上的同時發生。實則作業系統裡面“同一時刻”隻有一個線程在執行,但是處理速率快,效果上是并發運作。

五.Thread建立線程

Thread類是線程類,其每一個執行個體表示一個可以并發運作的線程。我們可以通過繼承該類并重寫run方法來定義一個具體的線程,其中要重寫run方法是為了線程要執行的邏輯。啟動線程時調用線程的start方法,start方法會将該線程納入線程排程,使目前線程可以開始并發運作,當該線程獲得時間片後會自動開始執行run方法内容。

public class TestThread extends Thread{

public void run(){

for(int i = 0; i < 100; i++){

System.out.println(''我是線程'');

}

}

}

定義好後執行個體化該對象,調用其start方法,啟動線程

TestThread thread = new TestThread();

thread.start();

六.Runnable建立線程

實作Runnable接口并重寫run方法來定義線程體,然後在建立線程的時候将Runnable的執行個體傳入并啟動線程。這樣做的好處在于将線程和線程執行的任務分離開解耦合。同時Java是單繼承,實作接口可以更好的讓該類去繼承其他類。

public class TestRunnable implements Runnable{

public void run(){

for(int i = 0; i < 100; i++){

System.out.println(''我是線程'');

}

}

}

定義好後,可以執行個體化該實作類并調用start方法啟動線程

Thread thread = new Thread(new TestRunnable());

thread.start();

七.内部類建立線程

通常我們可以通過匿名内部類的方式建立線程,使用該方式可以簡化編寫代碼的複雜度,當一個線程僅需要一個執行個體時我們通常使用這種方式來建立。

Thread thread = new Thread(){

public void run(){

//線程體

}

};

thread.start();

Runnable thread = new Runnable(){

public void run(){

//線程體

}

};

thread.start();

java多線程并發原理