麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Java多線程開發系列之一:走進多線程

2019-11-14 22:54:59
字體:
來源:轉載
供稿:網友
java多線程開發系列之一:走進多線程

對編程語言的基礎知識:分支、選擇、循環、面向對象等基本概念理解后,我們需要對java高級編程有一定的學習,這里不可避免的要接觸到多線程開發。

由于多線程開發整體的系統比較大,我會寫一個系列的文章總結介紹 多線程開發的概念、使用、線程狀態、同步、線程池。希望與大家共勉。

在第一部分,也就是本節我們先介紹下 什么是多線程程序、線程和進程又是什么,以及為什么要搞多線程。


(一)什么是多線程程序

多線程聽上去是非常專業的概念,其實非常簡單,我們在日常生活中,經常的接觸到多線程。

比如

(1)在工廠,工人努力工作,分工明確。一些工人準備生產資料(混凝土、鋼筋、磚頭),另外一些工人挖掘地基,還有些工人負責平常無聊的看管,后勤的保障(有點像守護進程,這個后面會專門講到)。他們總體來說就是把一件事分成若干的工作,然后派不同的人去做,最后使工作得到完善的解決。(一個工人算一條線程)

(2)一個學生完成晚上寫的作業,有語、數、外的作業。這名學生寫了一半的語文作業后,有一道題不會做,先去完成數學作業,接著再完成英語作業,最后等到家長回來完成語文作業。(一門作業算一條線程)

主要是有這兩種情況的多線程,

一種是上邊有多個工人(多處理器),各個工人間的工作影響不大,不會因為其中一個工人的努力工作,而導致另外一個工作停歇。

另外一種就是下邊的寫作業形式(單處理器,只有一個人在做作業),雖然我們有多個作業需要在今天晚上完成(執行),但是某一個時刻我們只能做一件事,當遇到某種情況(例如不會做、或者心情不好)我們隨意的切換到其他的科目,然后開始其他的工作,因為某些原因(如有人可以出現輔導),那么我們又可以切換回來,繼續做一開始未完成的事情,直到所有的事情都解決完為止。這里要區分一下:寫作業的例子看著有點像單線程模式的例子,實則不然,單線程只能按照某種既定的順序,順序完成事情,比如語文->外語->數學。遇到困難時(不會做),并不能因為某種原因,而隨意的切換,只能苦苦等待。而多線程則可根據環境動態的轉換,如他們之間的順序如語文->外語->數學->語文->外語->外語->數學 這樣。(防盜連接:本文首發自王若伊_恩賜解脫http://www.companysz.com/jilodream/ )

這種一次做多件事的情況就是多線程(包含短時間內快速的切換,形成一次做多件事的感覺),下面介紹進程和線程,從計算機的角度來談談編程中多線程的概念。


(二)線程和進程又是什么

進程: 對于一個OS,如果有一個程序在內存中開始運行,我們就可以說這個運行的程序就是一個進程。這個進程擁有自己獨立的功能,并且是OS調度和分配資源的一個獨立單位。

對于進程有三個特點

(1)獨立性:進程是系統中獨立存在的一個實體,擁有自己的資源的,沒有自身的允許的話,其他用戶進程是不能訪問他內部的。

(2)動態性:進程是有生命周期的,他是在OS中活動的一個指令集合。而程序只是一個靜態的指令集合。

(3)并發性:在只有一個處理器時,多個進程間也可以并發執行,互相并不影響。(進程間相互輪換執行,如同同時進行一般)

線程:線程是進程執行單元,也可以說是一個輕量級的進程。就像OS中進程是獨立的一樣,進程中的各個線程也是獨立的。每個線程都有自己獨立的堆棧及其他資源?;ハ嗖⒉皇苡绊憽6M程(這些線程的擁有者)的所有系統資源,被它包含的所有線程所共有分享。

線程也是獨立的,他并不知道當前進程中其他線程的存在,而當前線程是否被執行,則與進程類似,是搶占式的。當前進程搶到了OS的執行權,而進程中的某一條線程又搶到了,當前可執行的權利(其他線程和進程被掛起)。

多線程就是一個進程中,可以有多個并發執行的獨立的任務,每一個任務可以說就是一個線程。

他們的關系:

一個OS下邊可以有若干的進程(但是至少要有一個進程)。

每一個進程下邊又有若干的線程(至少要有一條線程)。


(三)為什么要搞多線程呢?

最最最核心的原因就是:提高工作效率,不要出現閑時等待,各個線程搶占式的工作。試想下,如果我們遇到什么問題,是應該一直苦苦等待(是什么都不做的等待)下去性能高呢,還是快速的切換到其他工作上去,我想在大部分的情況下都是快速搶占吧。(有時可能會出現,你剛剛切換,原來苦苦等待的事情剛剛結束。。。。這種碰巧的情況),舉個實際點的例子,當我們查詢某一個數據時,這個數據可能非常大,我們需要等待好久才能在頁面上加載下來,此時倘若單線程苦苦等待時,我們的程序就是被掛死了(試想下沒有響應的場景),直到過去了很久,頁面才被激活,變成可用的狀態。這期間我們什么事情也干不了(對該程序),這時的場景效率很低下,而且非常不友好。

  倘若有很好的多線程支持的話,那么在加載數據、繪制圖片時,我們還可以隨意的切換程序,并不影響其他的操作,從而提高性能。于此同時,由于多線程共享父進程的其他所有資源,所以線程間可以很好的交流數據(數據共享和通信),并且新開辟的線程(新開辟的任務),OS并不會為該進程分配大量的資源(相對于為新開辟任務而創建新進程而言)。

總結一下有如下幾個優點

1、線程間可以很好的共享內存資源,進程間是完全獨立內存的,所以不方便。(前文中提到線程間是相互獨立的,除非一進程允許,否則其他的進程是不允許直接訪問它地址的)

2、系統創建新線程的開銷,新創建進程的開銷要小的多,因此可大大降低多并發的代價。

3、在編碼時,我們可以通過類庫和代碼很好的管理各個線程,而不是直接通過操作系統來指揮當前執行的進程。從而大大的方便了我們可以處理并發任務的執行。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 99视频有精品视频高清 | 久久99国产精品久久99果冻传媒 | 日本欧美一区二区 | 宅男视频在线观看免费 | 成人三级免费电影 | 视频一区二区视频 | 免费观看黄色片视频 | 主人在调教室性调教女仆游戏 | 一本精品999爽爽久久久 | 欧美成人免费一区二区三区 | 精品中文视频 | 亚洲射情 | 国产精品91在线 | 娇妻被各种姿势c到高潮小说 | 成人福利视频导航 | 性大片免费看 | 国产精品入口夜色视频大尺度 | 九九综合视频 | 色呦呦一区二区三区 | 国产成人精品网站 | 国产亚洲精品久久久久婷婷瑜伽 | 日韩视频在线观看免费 | 深夜激情视频 | 亚洲免费视| 久久免费视频5 | 久久免费视频精品 | 国产一级毛片高清视频 | xxxx欧美视频 | 国产又粗又爽又深的免费视频 | 欧美a视频在线观看 | 一区二区三区小视频 | 俄罗斯16一20sex牲色另类 | 色婷婷久久一区二区 | 久久久久亚洲视频 | 日本高清com | av在线成人 | 国产999视频在线观看 | 国产1区在线 | 一级黄色毛片免费 | 欧美国产一区二区三区 | 久久久久久久久国产精品 |