更新時間:2021-05-08 10:35:01 來源:動力節點 瀏覽1076次
1.進程
進程是操作系統中運行的一個任務(一個應用程序在一個進程中),進程(process)是一塊包含了某些資源的內存區域,操作系統利用進程把它的工作劃分為一些功能單元。進程中包含的一個或多個執行單元稱為線程。進程還有一個私有的虛擬內存空間,該空間僅能被它所包含的線程訪問。線程只能歸屬一個進程并且它只能訪問該進程所擁有的資源。當操作系統創建一個進程后,該進程會主動申請一個主線程。
2.線程
一個線程是一個進程的順序執行流。同類的多個線程共享一塊內存空間和一組系統資源,線程本身有一個供程序執行時的堆棧。線程在切換時負荷小,因此,線程也被稱為輕負荷進程,一個進程中可以包含多個線程。
3.進程和線程的區別
一個進程至少有一個線程。線程的劃分尺度小于進程,使得多線程程序的并發性高。另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序運行效率。線程在執行過程中與進程的區別在于每個獨立的線程有個程序運行入口、順序執行序列和程序出口。但是線程不能獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。從邏輯角度看,多線程的意義在于一個應用程序中,有多個執行部分共同執行一個資源。
4.并發原理
多個線程“同時”運行只是我們感觀上的一種表現。事實上線程是并發運行的,操作系統將時間劃分為很多時間段,盡可能的均勻分配給每一個線程,獲取到時間片的線程被CPU執行,其他則一直在等待。所以微觀上是走走停停,宏觀上都在運行。這種現象叫并發,但不是絕對意義上的同時發生。實則操作系統里面“同一時刻”只有一個線程在執行,但是處理速率快,效果上是并發運行。
5.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();
6.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();
7.內部類創建線程
通常我們可以通過匿名內部類的方式創建線程,使用該方式可以簡化編寫代碼的復雜度,當一個線程僅需要一個實例時我們通常使用這種方式來創建。
Thread thread = new Thread(){
public void run(){
//線程體
}
};
thread.start();
Runnable thread = new Runnable(){
public void run(){
//線程體
}
};
thread.start();
以上就是動力節點小編介紹的"Java多線程并發原理",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習