中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java多線程和進程的區別

發布時間:2021-06-15 13:56:50 來源:億速云 閱讀:539 作者:chen 欄目:編程語言

這篇文章主要講解了“Java多線程和進程的區別”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java多線程和進程的區別”吧!

線程是進程中的一個獨立控制單元,線程在控制著進程的執行,一個進程中至少有一個線程。多線程可以更好地利用cpu的資源,線程之間還能進行數據共享。

在Java中,一個線程是指進程中的一個執行流程,一個進程可以運行多個線程,Java中每個線程都有一個調用棧,即使不在程序中創建任何新的線程,也有一個main()方法運行在一個線程內,稱為主線程,一旦創建一個新的線程,就產生一個新的調用棧。

Java多線程和進程的區別

多線程的基本概念

線程指進程中的一個執行場景,也就是執行流程,那么進程和線程有什么區別呢?

  • 每個進程是一個應用程序,都有獨立的內存空間

  • 同一個進程中的線程共享其進程中的內存和資源

(共享的內存是堆內存和方法區內存,棧內存不共享,每個線程有自己的。)

什么是進程?

一個進程就是一個應用程序。在操作系統中每啟動一個應用程序就會相應的啟動一個進程。例如:千千靜聽進程,魔獸進程,Word 進程,QQ 進程,JVM  啟動對應一個進程。

系統引入多進程的作用?

最初的計算機是“單進程的”,計算機只能運行一個應用程序,例如第一臺計算機只有DOS  窗口。現代的計算機可以滿足我們一邊聽音樂,一邊玩游戲。現代的計算給我們人類感覺:多件事情一起運行。感覺是并行的(錯覺)。

對于單核的計算機來講,在某一個時間點上只能做一件事情,但是由于計算機的處理速度  很高,多個進程之間完成頻繁的切換執行,這個切換速度使人類產生了錯覺,人類的錯覺是:

多個進程在同時運行。

計算機引入多進程的作用:提高 CPU 的使用率。

  • 重點:進程和進程之間的內存獨立。

什么是線程?

線程是進程的一個執行場景。一個進程可以啟動多個線程。

進程引入多線程的作用?

提高進程的使用率。

  • 重點:線程和線程之間棧內存獨立,堆內存和方法區內存共享。一個線程一個棧。

描述 java 程序的執行原理:

java命令執行會啟動 JVM,JVM的啟動表示啟動一個應用程序,表示啟動了一個進程。該進程會自動啟動一個“主線程”,然后主線程負責調用某個類的 main  方法。所以 main 方法的執行是在主線程中執行的。然后通過main 方法代碼的執行可以啟動其他的“分支線程”。

所以,main 方法結束程序不一定結束,因為其他的分支線程有可能還在執行。

線程的創建和啟動

Java 虛擬機的主線程入口是main 方法,用戶可以自己創建線程,創建方式有兩種:

  • 繼承 Thread 類

  • 實現Runnable 接口(推薦使用Runnable 接口)

繼承 Thread 類

Thread 類中創建線程最重要的兩個方法為:

public void run()  public void start()

采用 Thread 類創建線程,用戶只需要繼承 Thread,覆蓋 Thread 中的run 方法,父類 Thread 中的run  方法沒有拋出異常,那么子類也不能拋出異常,最后采用start 啟動線程即可

【示例代碼】,不使用線程

 public class ThreadTest01 {     public static void main(String[] args) { Processor p = new Processor(); p.run();  method1(); }  private static void method1() { System.out.println("--------method1()   "); } }  class Processor {  public void run() { for (int i=0; i<10; i++) { System.out.println(i); } } }

 Java多線程和進程的區別

以上順序輸出相應的結果(屬于串行),也就是run 方法完全執行完成后,才執行method1 方法,也就是method1  必須等待前面的方法返回才可以得到執行,這是一種“同步編程模型”

【代碼示例】,使用線程

 public class ThreadTest02 {  public static void main(String[] args) { Processor p = new Processor();  //手動調用該方法 //不能采用run 來啟動一個場景(線程), //run 就是一個普通方法調用 //p.run();  //采用start 啟動線程,不是直接調用run //start 不是馬上執行線程,而是使線程進入就緒 //線程的正真執行是由Java 的線程調度機制完成的 p.start();  //只能啟動一次 //p.start();  method1(); }  private static void method1() { System.out.println("--------method1()   "); } }  class Processor extends Thread {  //覆蓋 Thread 中的run 方法,該方法沒有異常 //該方法是由java 線程掉機制調用的   //我們不應該手動調用該方法public void run() { for (int i=0; i<10; i++) { System.out.println(i); } } }

Java多線程和進程的區別

通過輸出結果大家會看到,沒有順序執行,而在輸出數字的同時執行了  method1()方法,如果從效率上看,采用多線程的示例要快些,因為我們可以看作他是同時執行的,mthod1()方法沒有等待前面的操作完成才執行,這叫“異步編程模型”

實現 Runnable 接口

其實 Thread 對象本身就實現了Runnable 接口,但一般建議直接使用 Runnable接口來寫多線程程序,因為接口會比類帶來更多的好處

【示例代碼】

public class ThreadTest03 {  public static void main(String[] args) { //Processor r1 = new Processor(); Runnable r1 = new Processor(); //不能直接調用run //p.run();  Thread t1 = new Thread(r1);    //啟動線程t1.start();  method1(); }  private static void method1() { System.out.println("--------method1()   "); } }  //實現Runnable 接口 class Processor implements Runnable {  //實現Runnable 中的run 方法 public void run() { for (int i=0; i<10; i++) { System.out.println(i); } } }

 Java多線程和進程的區別

感謝各位的閱讀,以上就是“Java多線程和進程的區別”的內容了,經過本文的學習后,相信大家對Java多線程和進程的區別這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福泉市| 莱州市| 区。| 金门县| 顺昌县| 惠水县| 柳江县| 宜春市| 普陀区| 丹巴县| 长治县| 澄城县| 包头市| 巴东县| 中西区| 绥宁县| 萨嘎县| 延安市| 新竹县| 泾川县| 嵩明县| 景洪市| 柞水县| 洛南县| 治县。| 龙南县| 瑞安市| 尉犁县| 大悟县| 公主岭市| 彩票| 夏邑县| 通榆县| 福建省| 和平区| 井研县| 铁岭市| 壤塘县| 荃湾区| 虞城县| 大新县|