真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java多線程和進(jìn)程的區(qū)別

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

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、井岡山網(wǎng)絡(luò)推廣、微信小程序、井岡山網(wǎng)絡(luò)營銷、井岡山企業(yè)策劃、井岡山品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供井岡山建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com

線程是進(jìn)程中的一個獨(dú)立控制單元,線程在控制著進(jìn)程的執(zhí)行,一個進(jìn)程中至少有一個線程。多線程可以更好地利用cpu的資源,線程之間還能進(jìn)行數(shù)據(jù)共享。

在Java中,一個線程是指進(jìn)程中的一個執(zhí)行流程,一個進(jìn)程可以運(yùn)行多個線程,Java中每個線程都有一個調(diào)用棧,即使不在程序中創(chuàng)建任何新的線程,也有一個main()方法運(yùn)行在一個線程內(nèi),稱為主線程,一旦創(chuàng)建一個新的線程,就產(chǎn)生一個新的調(diào)用棧。

Java多線程和進(jìn)程的區(qū)別

多線程的基本概念

線程指進(jìn)程中的一個執(zhí)行場景,也就是執(zhí)行流程,那么進(jìn)程和線程有什么區(qū)別呢?

  • 每個進(jìn)程是一個應(yīng)用程序,都有獨(dú)立的內(nèi)存空間

  • 同一個進(jìn)程中的線程共享其進(jìn)程中的內(nèi)存和資源

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

什么是進(jìn)程?

一個進(jìn)程就是一個應(yīng)用程序。在操作系統(tǒng)中每啟動一個應(yīng)用程序就會相應(yīng)的啟動一個進(jìn)程。例如:千千靜聽進(jìn)程,魔獸進(jìn)程,Word 進(jìn)程,QQ 進(jìn)程,JVM  啟動對應(yīng)一個進(jìn)程。

系統(tǒng)引入多進(jìn)程的作用?

最初的計算機(jī)是“單進(jìn)程的”,計算機(jī)只能運(yùn)行一個應(yīng)用程序,例如第一臺計算機(jī)只有DOS  窗口?,F(xiàn)代的計算機(jī)可以滿足我們一邊聽音樂,一邊玩游戲?,F(xiàn)代的計算給我們?nèi)祟惛杏X:多件事情一起運(yùn)行。感覺是并行的(錯覺)。

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

多個進(jìn)程在同時運(yùn)行。

計算機(jī)引入多進(jìn)程的作用:提高 CPU 的使用率。

  • 重點(diǎn):進(jìn)程和進(jìn)程之間的內(nèi)存獨(dú)立。

什么是線程?

線程是進(jìn)程的一個執(zhí)行場景。一個進(jìn)程可以啟動多個線程。

進(jìn)程引入多線程的作用?

提高進(jìn)程的使用率。

  • 重點(diǎn):線程和線程之間棧內(nèi)存獨(dú)立,堆內(nèi)存和方法區(qū)內(nèi)存共享。一個線程一個棧。

描述 java 程序的執(zhí)行原理:

java命令執(zhí)行會啟動 JVM,JVM的啟動表示啟動一個應(yīng)用程序,表示啟動了一個進(jìn)程。該進(jìn)程會自動啟動一個“主線程”,然后主線程負(fù)責(zé)調(diào)用某個類的 main  方法。所以 main 方法的執(zhí)行是在主線程中執(zhí)行的。然后通過main 方法代碼的執(zhí)行可以啟動其他的“分支線程”。

所以,main 方法結(jié)束程序不一定結(jié)束,因?yàn)槠渌姆种Ь€程有可能還在執(zhí)行。

線程的創(chuàng)建和啟動

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

  • 繼承 Thread 類

  • 實(shí)現(xiàn)Runnable 接口(推薦使用Runnable 接口)

繼承 Thread 類

Thread 類中創(chuàng)建線程最重要的兩個方法為:

public void run()  public void start()

采用 Thread 類創(chuàng)建線程,用戶只需要繼承 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多線程和進(jìn)程的區(qū)別

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

【代碼示例】,使用線程

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

Java多線程和進(jìn)程的區(qū)別

通過輸出結(jié)果大家會看到,沒有順序執(zhí)行,而在輸出數(shù)字的同時執(zhí)行了  method1()方法,如果從效率上看,采用多線程的示例要快些,因?yàn)槲覀兛梢钥醋魉峭瑫r執(zhí)行的,mthod1()方法沒有等待前面的操作完成才執(zhí)行,這叫“異步編程模型”

實(shí)現(xiàn) Runnable 接口

其實(shí) Thread 對象本身就實(shí)現(xiàn)了Runnable 接口,但一般建議直接使用 Runnable接口來寫多線程程序,因?yàn)榻涌跁阮悗砀嗟暮锰?/p>

【示例代碼】

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

 Java多線程和進(jìn)程的區(qū)別

感謝各位的閱讀,以上就是“Java多線程和進(jìn)程的區(qū)別”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java多線程和進(jìn)程的區(qū)別這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!


網(wǎng)站標(biāo)題:Java多線程和進(jìn)程的區(qū)別
URL網(wǎng)址:http://weahome.cn/article/josjge.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部