成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

看完這篇Java多線程的講解,思路突然就清晰了...

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

[[404032]]

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

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

多線程的基本概念

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

  • 每個進程是一個應用程序,都有獨立的內存空間
  • 同一個進程中的線程共享其進程中的內存和資源

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

什么是進程?

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

系統引入多進程的作用?

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

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

多個進程在同時運行。

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

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

什么是線程?

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

進程引入多線程的作用?

提高進程的使用率。

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

描述 java 程序的執行原理:

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

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

線程的創建和啟動

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

  • 繼承 Thread 類
  • 實現Runnable 接口(推薦使用Runnable 接口)

繼承 Thread 類

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

  1. public void run() 
  2.  
  3. public void start() 

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

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

  1.  public class ThreadTest01 { 
  2.     
  3. public static void main(String[] args) { Processor p = new Processor(); p.run(); 
  4.  
  5. method1(); 
  6.  
  7. private static void method1() { System.out.println("--------method1()   "); 
  8.  
  9. class Processor { 
  10.  
  11. public void run() { 
  12. for (int i=0; i<10; i++) { System.out.println(i); 

 

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

【代碼示例】,使用線程

  1.  public class ThreadTest02 { 
  2.  
  3. public static void main(String[] args) { Processor p = new Processor(); 
  4.  
  5. //手動調用該方法 
  6. //不能采用run 來啟動一個場景(線程), 
  7. //run 就是一個普通方法調用 
  8. //p.run(); 
  9.  
  10. //采用start 啟動線程,不是直接調用run 
  11. //start 不是馬上執行線程,而是使線程進入就緒 
  12. //線程的正真執行是由Java 的線程調度機制完成的 
  13. p.start(); 
  14.  
  15. //只能啟動一次 
  16. //p.start(); 
  17.  
  18. method1(); 
  19.  
  20. private static void method1() { System.out.println("--------method1()   "); 
  21.  
  22. class Processor extends Thread { 
  23.  
  24. //覆蓋 Thread 中的run 方法,該方法沒有異常 
  25. //該方法是由java 線程掉機制調用的 
  26.   //我們不應該手動調用該方法public void run() { 
  27. for (int i=0; i<10; i++) { System.out.println(i); 

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

實現 Runnable 接口

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

【示例代碼】

  1. public class ThreadTest03 { 
  2.  
  3. public static void main(String[] args) { 
  4. //Processor r1 = new Processor(); Runnable r1 = new Processor(); 
  5. //不能直接調用run 
  6. //p.run(); 
  7.  
  8. Thread t1 = new Thread(r1); 
  9.    
  10. //啟動線程t1.start(); 
  11.  
  12. method1(); 
  13.  
  14. private static void method1() { System.out.println("--------method1()   "); 
  15.  
  16. //實現Runnable 接口 
  17. class Processor implements Runnable { 
  18.  
  19. //實現Runnable 中的run 方法 
  20. public void run() { 
  21. for (int i=0; i<10; i++) { System.out.println(i); 

 

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2020-07-20 10:20:30

this前端代碼

2022-07-01 13:38:48

霧計算邊緣計算

2020-01-09 15:30:32

微服務架構互聯網

2020-02-08 16:46:29

微服務架構復雜

2023-10-08 08:41:04

JavaPython編程語言

2024-09-27 11:51:33

Redis多線程單線程

2025-03-28 08:53:51

2020-01-06 08:40:11

阿里場景服務

2021-05-08 07:53:33

面試線程池系統

2024-11-19 18:03:04

2021-08-26 11:10:42

架構運維技術

2017-03-07 15:35:26

Android適配 界面

2020-12-09 08:35:45

Shell腳本語法

2017-03-10 21:04:04

Android適配

2019-11-27 08:41:41

Java進程虛擬機

2019-08-01 11:04:10

Linux磁盤I

2016-03-03 17:42:10

DockerDCOS

2019-10-30 09:25:58

NginxApache 服務器

2019-07-10 15:15:23

JVM虛擬機Java

2022-09-02 19:10:46

高并發架構系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久成人精品视频 | 蜜桃在线一区二区三区 | 日日摸夜夜添夜夜添精品视频 | 日韩三级| 九九av | 国产免费观看视频 | 蜜桃在线一区二区三区 | 国产亚洲一区在线 | 91精品国产91久久综合桃花 | 国产精品入口久久 | 国产精品1区2区3区 一区中文字幕 | 日韩精品免费一区 | 久久宗合色 | 亚洲性视频| 国产精品成人一区二区三区夜夜夜 | 国产一级在线观看 | 亚洲一区二区中文字幕 | 国产美女一区 | 一区不卡在线观看 | 欧美aⅴ| 国产美女精品视频 | 日韩和的一区二区 | 性色网站| 免费的av | 午夜视频免费 | 在线观看深夜视频 | 伊人啪啪网 | 欧美国产一区二区 | 亚洲成人毛片 | 免费一区二区三区 | 毛片在线看片 | 久草视频在线看 | 欧美一a一片一级一片 | 黄网站在线播放 | 天天综合网7799精品 | 色婷婷综合久久久中文字幕 | 亚洲欧美在线观看 | 一级在线免费观看 | 日韩欧美一区在线 | 91影视| 久久精品国产一区二区电影 |