多線程是什么意思?。吭誦卸喔齔絳虻囊饉悸穡?/h3>【什么是多線程】舉個例子,下載東西時開了多線程,就是把這一個東西分了多個塊,幾個塊同時下載.
多線程工作是什么意思?什么是線程?
英文:Thread
每個正在系統上運行的程序都是一個進程 。每個進程包含一到多個線程 。進程也可能是整個程序或者是部分程序的動態執行 。線程是一組指令的集合 , 或者是程序的特殊段,它可以在程序里獨立執行 。也可以把它理解為代碼運行的上下文 。所以線程基本上是輕量級的進程,它負責在單個程序里執行多任務 。通常由操作系統負責多個線程的調度和執行 。
什么是多線程?
多線程是為了使得多個線程并行的工作以完成多項任務,以提高系統的效率 。線程是在同一時間需要完成多項任務的時候被實現的 。
使用線程的好處有以下幾點:
·使用線程可以把占據長時間的程序中的任務放到后臺去處理
·用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度
·程序的運行速度可能加快
·在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了 。在這種情況下我們可以釋放一些珍貴的資源如內存占用等等 。
還有其他很多使用多線程的好處,這里就不一一說明了 。
一些線程模型的背景
我們可以重點討論一下在Win32環境中常用的一些模型 。
·單線程模型
在這種線程模型中,一個進程中只能有一個線程 , 剩下的進程必須等待當前的線程執行完 。這種模型的缺點在于系統完成一個很小的任務都必須占用很長的時間 。
CPU的多線程是什么意思?CPU的超線程是什么意思?別著急,聽專業人士慢慢給你講解
多線程是什么意思?1 。單進程單線程:一個人在一個桌子上吃菜 。
2 。單進程多線程:多個人在同一個桌子上一起吃菜 。
3 。多進程單線程:多個人每個人在自己的桌子上吃菜 。
多線程的問題是多個人同時吃一道菜的時候容易發生爭搶,例如兩個人同時夾一個菜,一個人剛伸出筷子,結果伸到的時候已經被夾走菜了 。。。此時就必須等一個人夾一口之后 , 在還給另外一個人夾菜,也就是說資源共享就會發生沖突爭搶 。
1 。對于 Windows 系統來說,【開桌子】的開銷很大,因此 Windows 鼓勵大家在一個桌子上吃菜 。因此 Windows 多線程學習重點是要大量面對資源爭搶與同步方面的問題 。
2 。對于 Linux 系統來說,【開桌子】的開銷很?。虼?Linux 鼓勵大家盡量每個人都開自己的桌子吃菜 。這帶來新的問題是:坐在兩張不同的桌子上,說話不方便 。因此 , Linux 下的學習重點大家要學習進程間通訊的方法 。
在java中單線程和多線程是什么意思,他們有什么區別,分別的作用是什么?去一個地方 , 只允許做火車;
去另外一個地方 , 可以采取任何方法,爬行都行~
什么是線程,什么又是多線程 它們之間有什線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以并發執行!
線程和多線程的區別是什么?謝謝跟你打個比方,搬磚頭 , 有500塊磚需要搬
1個人搬1塊磚需要1秒鐘
單線程:10個人搬 , 但是排著隊般,需要500秒才能搬完
多線程:也是10個人搬,但是一起搬,只需50秒就可以完成
多線程的優點就是節約時間,但比較占內存.
具體的實現就看你自己用什么語言了.希望對你有幫助.
什么是線程,線程和進程有什么區別?進程和線程都是由操作系統所體現的程序運行的基本單元,系統利用該基本單元實現系統對應用的并發性 。
進程和線程的區別在于:
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小于進程,使得多線程程序的并發性高 。
另外 , 進程在執行過程中擁有獨立的內存單元,而多個線程共享內存 , 從而極大地提高了程序的運行效率 。
線程在執行過程中與進程還是有區別的 。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出 口 。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制 。
從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執行部分可以同時執行 。但操作系統并沒有將多個線程看做多個獨立的應用 , 來實現進程的調度和管理以及資源分配 。這就是進程和線程的重要區別 。
進程是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位. 線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以并發執行.
我上學期的課程復習時候總結的
java中單線程和多線程是什么意思?他們有什么區別?各自的作用是什么?在一個程序中,這些獨立運行的程序片斷叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理” 。多線程處理一個常見的例子就是用戶界面 。利用線程,用戶可按下一個按鈕,然后程序會立即作出響應 , 而不是讓用戶等待程序完成了當前任務以后才開始響應 。簡單地說,就是說可以有多個任務同時進行 。
單線程在程序執行時 , 所走的程序路徑按照連續順序排下來,前面的必須處理好,后面的才會執行 。因此,針對前面舉的例子 , 必須等待程序完成了當前任務以后才能開始相應 。
使用多線程訪問公共的資源時,容易引發線程安全性問題,因此針對這種需要使用線程同步機制來保護公共的資源 。
單線程較多線程來說,就不會出現上訴問題,系統穩定、擴展性極強、軟件豐富 。多用于點對點的服務 。
什么是多線程,多進程?

文章插圖
1、多線程:是指從軟件或者硬件上實現多個線程并發執行的技術 。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程,進而提升整體處理性能 。具有這種能力的系統包括對稱多處理機、多核心處理器以及芯片級多處理或同時多線程處理器 。在一個程序中,這些獨立運行的程序片段叫作“線程”,利用它編程的概念就叫作“多線程處理” 。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程,進而提升整體處理性能 。2、多進程:Windows 應用程序中消息有兩種送出途徑;直接和排隊 。Windows或某些運行的應用程序可直接發布消息給窗口過程,或者,消息可送到消息列象連續不斷輪詢消息隊列的OS中當前執行的每個進程都 事件驅動程序不是由事件的順序來控制 , 而是由事件的發生來控,而事件的發生是隨機的、不確定的,這就允許程序的用戶用各種合理的順序來安排程序的流程 。擴展資料:多線程優點:1、使用線程可以把占據時間長的程序中的任務放到后臺去處理2、用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度3、程序的運行速度可能加快4、在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了 。在這種情況下可以釋放一些珍貴的資源如內存占用等等 。5、多線程技術在IOS軟件開發中也有舉足輕重的位置 。參考資料來源:百度百科-多線程百度百科-多進程
多線程的主要用處是什么?進程中的所有線程共享進程的虛擬地址空間,進程中的線程是并行執行的,系統為每個線程劃分執行時間,
線程是什么意思先看看專業的解釋是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源 , 只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源 。一個線程可以創建和撤消另一個線程,同一進程中的多個線程之間可以并發執行 。由于線程之間的相互制約,致使線程在運行中呈現出間斷性 。線程也有就緒、阻塞和運行三種基本狀態 。
線程是程序中一個單一的順序控制流程.在單個程序中同時運行多個線程完成不同的工作,稱為多線程.
線程和進程的區別在于,子進程和父進程有不同的代碼和數據空間,而多個線程則共享數據空間,每個線程有自己的執行堆棧和程序計數器為其執行上下文.多線程主要是為了節約CPU時間,發揮利用,根據具體情況而定. 線程的運行中需要使用計算機的內存資源和CPU
.....我用例子給你說下比如你們學校大掃除,分工到每一個班級你們班級就叫做進程,負責的任務是大掃除,就是主線程然后你們班有3個小組,第一組掃地,第二組拖地,第三組擦窗戶那么這三組分別做了三種不同的事情,可以看作三個線程也就是說線程隸屬于進程是一個包含被包含的關系每個線程的作用不一樣就上上面我說的三個線程,一個作用是掃地 , 一個是拖地 , 一個擦窗戶理解起來也不是很難
CPU多線程的作用是什么?CPU是一塊超大規模的集成電路,是一臺計算機的運算核心(Core)和控制核心( Control Unit) 。
多線程是什么意思?我們現在所使用操作系統都是多任務操作系統(早期使用的DOS操作系統為單任務操作系統),多任務操作指在同一時刻可以同時做多件事(可以同時執行多個程序) 。多進程:每個程序都是一個進程,在操作系統中可以同時執行多個程序,多進程的目的是為了有效的使用CPU資源,每開一個進程系統要為該進程分配相關的系統資源(內存資源)多線程:線程是進程內部比進程更小的執行單元(執行流|程序片段),每個線程完成一個任務,每個進程內部包含了多個線程每個線程做自己的事情 , 在進程中的所有線程共享該進程的資源;主線程:在進程中至少存在一個主線程,其他子線程都由主線程開啟,主線程不一定在其他線程結束后結束 , 有可能在其他線程結束前結束 。Java中的主線程是main線程,是Java的main函數;
多線程的定義是什么?線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨立執行 。也可以把它理解為代碼運行的上下文 。所以線程基本上是輕量級的進程,它負責在單個程序里執行多任務 。通常由操作系統負責多個線程的調度和執行 。
多線程是這樣一種機制,它允許在程序中并發執行多個指令流,每個指令流都稱為一個線程,彼此間互相獨立 。線程又稱為輕量級進程,它和進程一樣擁有獨立的執行控制,由操作系統負責調度 。
多線程是多任務的特殊形式 。通常,有兩種類型的多任務:基于進程和基于線程的多任務 。進程本質上是正在執行的程序 。因此,基于進程的多任務就是允許您的計算機同時運行兩個或者更多程序的特性 。例如,基于進程的多任務允許您在使用電子制表軟件或者瀏覽Internet的同時運行文字處理程序 。在基于進程的多任務中 , 程序是調度程序可以分派的最小代碼單元 。
多線程是為了使得多個線程并行的工作以完成多項任務 , 以提高系統的效率 。線程是在同一時間需要完成多項任務的時候被實現的 。
使用線程的好處有以下幾點:
·使用線程可以把占據長時間的程序中的任務放到后臺去處理
·用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度
·程序的運行速度可能加快
·在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較游泳了 。在這種情況下我們可以釋放一些珍貴的資源如內存占用等等 。
還有其他很多使用多線程的好處,這里就不一一說明了 。
多線程應用
我們以客戶/服務器應用模式中如何進行服務器程序設計為例,來說明多線程技術的應用 。該程序是在DECnet-VAX網絡郵箱上實現的 。對于TCP/IP,除了改用捆綁的套接字(socket)來代替DECnet中的網絡郵箱以監視客戶的服務請求外,其他方面基本上是一樣的 。
為了簡化說明 , 假定該服務程序只提供2類功能 , 分別由函數funcl( )和func2( )來實現 。客戶在請求服務時要指明功能號1或2 。另外限制需要同時提供服務的客戶數目 。
多線程程序的基本設計思想是,為請求服務的每個客戶建立1個線程,專門為該客戶提供服務 。限制客戶數目就是限制同時存在的線程數目 。這些動態建立的線程對象存放在數組中 。通過查找該數組是否有空槽,來決定是否達到最大數目 。同時利用該數組來管理這些動態存在的線程及相應的網絡鏈路 。整個程序由1個主程序和提供2類服務的2個子程序組成 。主程序(主控線程)在完成初始化操作后,開始循環讀取郵箱中的網絡控制信息;在接收到連接請求信息后,主控線程就建立1個新線程,并指定相應的函數作為執行代碼;如果客戶要斷開連接,則主控線程查找到相應的服務線程號,釋放該服務線程使用的網絡鏈路,并刪除此線程 。
什么是線程、什么又是多線程 它們之間有什么區別呢?說法一:進程是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位.
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以并發執行
說法二:進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的并發性 。進程和線程的區別在于:
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小于進程,使得多線程程序的并發性高 。
另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率 。
線程在執行過程中與進程還是有區別的 。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口 。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制 。
從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執行部分可以同時執行 。但操作系統并沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配 。這就是進程和線程的重要區別 。
說法三:多線程共存于應用程序中是現代操作系統中的基本特征和重要標志 。用過UNIX操作系統的讀者知道進程,在UNIX操作系統中,每個應用程序的執行都在操作系統內核中登記一個進程標志,操作系統根據分配的標志對應用程序的執行進行調度和系統資源分配 , 但進程和線程有什么區別呢?
進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的并發性 。進程和線程的區別在于:
線程的劃分尺度小于進程,使得多線程程序的并發性搞 。
另外 , 進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率 。
線程在執行過程中與進程還是有區別的 。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口 。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制 。
從邏輯角度來看 , 多線程的意義在于一個應用程序中,有多個執行部分可以同時執行 。但操作系統并沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配 。這就是進程和線程的重要區別 。
進程(Process)是最初定義在Unix等多用戶、多任務操作系統環境下用于表示應用程序在內存環境中基本執行單元的概念 。以Unix操作系統為例,進程是Unix操作系統環境中的基本成分、是系統資源分配的基本單位 。Unix操作系統中完成的幾乎所有用戶管理和資源分配等工作都是通過操作系統對應用程序進程的控制來實現的 。
C、C++、Java等語言編寫的源程序經相應的編譯器編譯成可執行文件后 , 提交給計算機處理器運行 。這時,處在可執行狀態中的應用程序稱為進程 。從用戶角度來看,進程是應用程序的一個執行過程 。從操作系統核心角度來看 , 進程代表的是操作系統分配的內存、CPU時間片等資源的基本單位,是為正在運行的程序提供的運行環境 。進程與應用程序的區別在于應用程序作為一個靜態文件存儲在計算機系統的硬盤等存儲空間中,而進程則是處于動態條件下由操作系統維護的系統資源管理實體 。多任務環境下應用程序進程的主要特點包括:
●進程在執行過程中有內存單元的初始入口點,并且進程存活過程中始終擁有獨立的內存地址空間;
●進程的生存期狀態包括創建、就緒、運行、阻塞和死亡等類型;
●從應用程序進程在執行過程中向CPU發出的運行指令形式不同,可以將進程的狀態分為用戶態和核心態 。處于用戶態下的進程執行的是應用程序指令、處于核心態下的應用程序進程執行的是操作系統指令 。
在Unix操作系統啟動過程中,系統自動創建swapper、init等系統進程,用于管理內存資源以及對用戶進程進行調度等 。在Unix環境下無論是由操作系統創建的進程還要由應用程序執行創建的進程,均擁有唯一的進程標識(PID) 。
說法四:應用程序在執行過程中存在一個內存空間的初始入口點地址、一個程序執行過程中的代碼執行序列以及用于標識進程結束的內存出口點地址,在進程執行過程中的每一時間點均有唯一的處理器指令與內存單元地址相對應 。
Java語言中定義的線程(Thread)同樣包括一個內存入口點地址、一個出口點地址以及能夠順序執行的代碼序列 。但是進程與線程的重要區別在于線程不能夠單獨執行,它必須運行在處于活動狀態的應用程序進程中,因此可以定義線程是程序內部的具有并發性的順序代碼流 。
Unix操作系統和Microsoft Windows操作系統支持多用戶、多進程的并發執行,而Java語言支持應用程序進程內部的多個執行線程的并發執行 。多線程的意義在于一個應用程序的多個邏輯單元可以并發地執行 。但是多線程并不意味著多個用戶進程在執行 , 操作系統也不把每個線程作為獨立的進程來分配獨立的系統資源 。進程可以創建其子進程,子進程與父進程擁有不同的可執行代碼和數據內存空間 。而在用于代表應用程序的進程中多個線程共享數據內存空間,但保持每個線程擁有獨立的執行堆棧和程序執行上下文(Context) 。
基于上述區別,線程也可以稱為輕型進程 (Light Weight Process,LWP) 。不同線程間允許任務協作和數據交換,使得在計算機系統資源消耗等方面非常廉價 。
線程需要操作系統的支持,不是所有類型的計算機都支持多線程應用程序 。Java程序設計語言將線程支持與語言運行環境結合在一起,提供了多任務并發執行的能力 。這就好比一個人在處理家務的過程中,將衣服放到洗衣機中自動洗滌后將大米放在電飯鍋里 , 然后開始做菜 。等菜做好了,飯熟了同時衣服也洗好了 。
需要注意的是:在應用程序中使用多線程不會增加 CPU 的數據處理能力 。只有在多CPU 的計算機或者在網絡計算體系結構下,將Java程序劃分為多個并發執行線程后,同時啟動多個線程運行 , 使不同的線程運行在基于不同處理器的Java虛擬機中,才能提高應用程序的執行效率 。
java 多線程是什么?線程定義比較抽象,簡單的說就是一個代碼執行流 。許多執行流可以混合在一起由CPU調度 。線程是允許各種任務交互執行的方式 。
Java的線程在操作系統的實現模式依系統不同而不同,可能是系統級別的進程或線程,但對于程序員來說并沒有影響 。
任務交互的一個好處是增加程序響應 。如一個界面程序執行一段耗時的數據庫查詢,使用單獨的線程可以讓界面依然響應用戶的其他輸入,而單線程只能等待查詢結束再處理 。
JVM以及操作系統會優先處理優先級別高的線程,但不代表這些線程一定會先完成 。設定優先級只能建議系統更快的處理,而不能強制 。
你補充的情況完全正確 。另外,在運行時,并沒有按照函數分界,而是按照機器碼/匯編碼分界 。也就是說不保證任何一段代碼是被完整而不打斷的執行的(除非你已經使用同步手段) 。正由于如此,各種線程同步的方法應運而生 。
什么是線程??線程是進程的一個實體,是CPU調度和分派的基本單位 , 它是比進程更小的能獨立運行的基本單位 。線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源 。就是你看見任務管理器的有一個瀏覽器正在運行,但是他的進程一般是一個網頁一個進程你可以右鍵切換到進程查看 。線程,有時被稱為輕量級進程(Lightweight Process,LWP) , 是程序執行流的最小單元 。一個標準的線程由線程ID,當前指令指針(PC) , 寄存器集合和堆棧組成 。另外,線程是進程中的一個實體 , 是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源 , 只擁有一點兒在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源 。一個線程可以創建和撤消另一個線程,同一進程中的多個線程之間可以并發執行 。由于線程之間的相互制約,致使線程在運行中呈現出間斷性 。線程也有就緒、阻塞和運行三種基本狀態 。就緒狀態是指線程具備運行的所有條件 , 邏輯上可以運行,在等待處理機;運行狀態是指線程占有處理機正在運行;阻塞狀態是指線程在等待一個事件(如某個信號量),邏輯上不可執行 。每一個程序都至少有一個線程,若程序只有一個線程,那就是程序本身 。線程是程序中一個單一的順序控制流程 。進程內有一個相對獨立的、可調度的執行單元,是系統獨立調度和分派CPU的基本單位指令運行時的程序的調度單位 。在單個程序中同時運行多個線程完成不同的工作,稱為多線程 。
java線程是什么一、操作系統中線程和進程的概念現在的操作系統是多任務操作系統 。多線程是實現多任務的一種方式 。進程是指一個內存中運行的應用程序,每個進程都有自己獨立的一塊內存空間,一個進程中可以啟動多個線程 。比如在Windows系統中 , 一個運行的exe就是一個進程 。線程是指進程中的一個執行流程,一個進程中可以運行多個線程 。比如java.exe進程中可以運行很多線程 。線程總是屬于某個進程 , 進程中的多個線程共享進程的內存 。“同時”執行是人的感覺,在線程之間實際上輪換執行 。二、Java中的線程在Java中,“線程”指兩件不同的事情:1、java.lang.Thread類的一個實例;2、線程的執行 。使用java.lang.Thread類或者java.lang.Runnable接口編寫代碼來定義、實例化和啟動新線程 。一個Thread類實例只是一個對象,像Java中的任何其他對象一樣,具有變量和方法 , 生死于堆上 。Java中,每個線程都有一個調用棧,即使不在程序中創建任何新的線程,線程也在后臺運行著 。一個Java應用總是從main()方法開始運行,mian()方法運行在一個線程內 , 它被稱為主線程 。一旦創建一個新的線程,就產生一個新的調用棧 。線程總體分兩類:用戶線程和守候線程 。當所有用戶線程執行完畢的時候,JVM自動關閉 。但是守候線程卻不獨立于JVM , 守候線程一般是由操作系統或者用戶自己創建的
什么是Java多線程編程?一、 什么是多線程:我們現在所使用操作系統都是多任務操作系統(早期使用的DOS操作系統為單任務操作系統),多任務操作指在同一時刻可以同時做多件事(可以同時執行多個程序) 。多進程:每個程序都是一個進程,在操作系統中可以同時執行多個程序,多進程的目的是為了有效的使用CPU資源 , 每開一個進程系統要為該進程分配相關的系統資源(內存資源)多線程:線程是進程內部比進程更小的執行單元(執行流|程序片段),每個線程完成一個任務,每個進程內部包含了多個線程每個線程做自己的事情,在進程中的所有線程共享該進程的資源;主線程:在進程中至少存在一個主線程,其他子線程都由主線程開啟,主線程不一定在其他線程結束后結束,有可能在其他線程結束前結束 。Java中的主線程是main線程,是Java的main函數;二、 Java中實現多線程的方式:繼承Thread類來實現多線程:當我們自定義的類繼承Thread類后,該類就為一個線程類,該類為一個獨立的執行單元,線程代碼必須編寫在run()方法中,run方法是由Thread類定義,我們自己寫的線程類必須重寫run方法 。run方法中定義的代碼為線程代碼,但run方法不能直接調用,如果直接調用并沒有開啟新的線程而是將run方法交給調用的線程執行要開啟新的線程需要調用Thread類的start()方法,該方法自動開啟一個新的線程并自動執行run方法中的內容請點擊輸入圖片描述結果:請點擊輸入圖片描述java多線程的啟動順序不一定是線程執行的順序,各個線程之間是搶占CPU資源執行的,所有有可能出現與啟動順序不一致的情況 。CPU的調用策略:如何使用CPU資源是由操作系統來決定的,但操作系統只能決定CPU的使用策略不能控制實際獲得CPU執行權的程序 。線程執行有兩種方式:1.搶占式:目前PC機中使用最多的一種方式,線程搶占CPU的執行權,當一個線程搶到CPU的資源后并不是一直執行到此線程執行結束 , 而是執行一個時間片后讓出CPU資源,此時同其他線程再次搶占CPU資源獲得執行權 。2.輪循式;每個線程執行固定的時間片后讓出CPU資源,以此循環執行每個線程執行相同的時間片后讓出CPU資源交給下一個線程執行 。希望對您有所幫助!~
java中什么叫做線程?什么叫多線程?多線程的特點是什么?先理解這幾概念:a1.程序:指令和數據的byte序列,eg:qq.exe;a2.進程:正在運行的程序(如QQ);a3.一個進程中可能有一到多個線程.
線程的概念:Thread每個正在系統上運行的程序都是一個進程 。每個進程包含一到多個線程 。進程也可能是整個程序或者是部分程序的動態執行 。
線程是一組指令的集合 , 或者是程序的特殊段,它可以在程序里獨立執行 。也可以把它理解為代碼運行的上下文 。
所以線程基本上是輕量級的進程,它負責在單個程序里執行多任務 。通常由操作系統負責多個線程的調度和執行 。
多線程的概念:多線程是為了同步完成多項任務,不是為了提高運行效率,而是為了提高資源使用效率來提高系統的效率 。
線程是在同一時間需要完成多項任務的時候實現的 。
多線程的優點:使用線程可以把占據長時間的程序中的任務放到后臺去處理
用戶界面可以更加吸引人 , 這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度·
程序的運行速度可能加快·在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了 。
在這種情況下我們可以釋放一些珍貴的資源如內存占用等等 。
什么是java多線程詳解線程對象是可以產生線程的對象 。比如在Java平臺中Thread對象,Runnable對象 。線程,是指正在執行的一個指點令序列 。在java平臺上是指從一個線程對象的start()開始 , 運行run方法體中的那一段相對獨立的過程 。相比于多進程,多線程的優勢有:
(1)進程之間不能共享數據,線程可以;
(2)系統創建進程需要為該進程重新分配系統資源 , 故創建線程代價比較?。?br>(3)Java語言內置了多線程功能支持,簡化了java多線程編程 。
一、創建線程和啟動
(1)繼承Thread類創建線程類
通過繼承Thread類創建線程類的具體步驟和具體代碼如下:
• 定義一個繼承Thread類的子類,并重寫該類的run()方法;
• 創建Thread子類的實例,即創建了線程對象;
• 調用該線程對象的start()方法啟動線程 。
復制代碼
class SomeThead extends Thraad{
public void run(){
//do something here
}
}
public static void main(String[] args){
SomeThread oneThread = new SomeThread();
步驟3:啟動線程:
oneThread.start();
}
復制代碼
(2)實現Runnable接口創建線程類
通過實現Runnable接口創建線程類的具體步驟和具體代碼如下:
• 定義Runnable接口的實現類,并重寫該接口的run()方法;
• 創建Runnable實現類的實例 , 并以此實例作為Thread的target對象 , 即該Thread對象才是真正的線程對象 。
復制代碼
class SomeRunnable implements Runnable{
public void run(){
//do something here
}
}
Runnable oneRunnable = new SomeRunnable();
Thread oneThread = new Thread(oneRunnable);
oneThread.start();
復制代碼
(3)通過Callable和Future創建線程
通過Callable和Future創建線程的具體步驟和具體代碼如下:
• 創建Callable接口的實現類,并實現call()方法,該call()方法將作為線程執行體,并且有返回值 。
• 創建Callable實現類的實例,使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值 。
• 使用FutureTask對象作為Thread對象的target創建并啟動新線程 。
• 調用FutureTask對象的get()方法來獲得子線程執行結束后的返回值其中 , Callable接口(也只有一個方法)定義如下:
復制代碼
public interface Callable{
V call() throws Exception;
}
步驟1:創建實現Callable接口的類SomeCallable(略);
步驟2:創建一個類對象:
Callable oneCallable = new SomeCallable();
步驟3:由Callable創建一個FutureTask對象:
FutureTask oneTask = new FutureTask(oneCallable);
注釋: FutureTask是一個包裝器,它通過接受Callable來創建,它同時實現了 Future和Runnable接口 。
步驟4:由FutureTask創建一個Thread對象:
Thread oneThread = new Thread(oneTask);
步驟5:啟動線程:
oneThread.start();
多線程是什么,有什么好處呢舉個例子,你要做飯,你要做的飯是米飯和一個炒菜 。如果是單線程,那么你可以如下做:第一種方法:先炒菜,然后開始蒸米飯;第二種方法:先蒸米飯,等米飯熟了再炒菜;如果是多線程,那么你就可以如下做:先蒸米飯,在蒸米飯的過程中去炒菜 。有些問題的解決用多線程會提高效率,比如上邊的例子 。但是有時不會提高效率,反而會影響效率:比如,你要洗衣服,還打算做家庭作業(假設你是小學生,老師給你布置的家庭作業) 。如果是單線程:你要么洗完衣服做作業,要么做完作業洗衣服 。如果是多線程:你洗一分鐘衣服做一分鐘作業,交叉進行,顯然有些時間都耗在了任務的切換上了 。所以 , 多線程主要用于,當一個任務需要不占用資源的等待的時候,可以使用空閑的資源做其他的事情 。比如類似于QQ聊天的程序,程序的一個線程一直在等待著看是否有好友發消息過來,而與此同時另一個線程允許你打字并且將自己的消息發送給對方 。以上例子并不是很完美,只是希望能借這些例子對多線程有所理解 。
什么是多線程和高并發“高并發和多線程”總是被一起提起,給人感覺兩者好像相等,實則 高并發 ≠ 多線程
多線程是完成任務的一種方法,高并發是系統運行的一種狀態,通過多線程有助于系統承受高并發狀態的實現 。
高并發是一種系統運行過程中遇到的一種“短時間內遇到大量操作請求”的情況,主要發生在web系統集中大量訪問或者socket端口集中性收到大量請求(例如:12306的搶票情況;天貓雙十一活動) 。該情況的發生會導致系統在這段時間內執行大量操作,例如對資源的請求,數據庫的操作等 。如果高并發處理不好,不僅僅降低了用戶的體驗度(請求響應時間過長),同時可能導致系統宕機,嚴重的甚至導致OOM異常,系統停止工作等 。如果要想系統能夠適應高并發狀態,則需要從各個方面進行系統優化 , 包括 , 硬件、網絡、系統架構、開發語言的選取、數據結構的運用、算法優化、數據庫優化……而多線程只是其中解決方法之一 。
什么是多線程,多線程編程的好處是什么舉個例子 , 你要做飯,你要做的飯是米飯和一個炒菜 。
如果是單線程,那么你可以如下做:
第一種方法:先炒菜 , 然后開始蒸米飯;
第二種方法:先蒸米飯,等米飯熟了再炒菜;
如果是多線程,那么你就可以如下做:
先蒸米飯,在蒸米飯的過程中去炒菜 。
有些問題的解決用多線程會提高效率,比如上邊的例子 。但是有時不會提高效率,反而會影響效率:
比如,你要洗衣服,還打算做家庭作業(假設你是小學生,老師給你布置的家庭作業) 。
如果是單線程:你要么洗完衣服做作業,要么做完作業洗衣服 。
如果是多線程:你洗一分鐘衣服做一分鐘作業,交叉進行,顯然有些時間都耗在了任務的切換上了 。
所以 , 多線程主要用于,當一個任務需要不占用資源的等待的時候,可以使用空閑的資源
什么是多線程編程?什么時候使用多線程的使用主要是用來處理程序“在一部分上會阻塞” , “在另一部分上需要持續運行”的場合 。一般是根據需求,可以用多線程,事件觸發,callback等方法達到 。但是有一些方法是只有多線程能辦到的就只有用多線程或者多進程來完成 。
舉個簡單的例子,能理解就行 。假設有這樣一個程序,
1會不停的處理收到的所有TCP請求 。對于每個TCP請求做不同的操作 。不能有遺漏
2有很多特定的請求會向一個服務器發送存儲的數據,或者是等待用戶輸入 。
來看看 。第1個要求很簡單 。用個while循環就搞定了 。但第2個特性呢 。一旦在等待用戶輸入或者是連接服務器時,程序會“阻塞”一段時間,這一段時間內就無法處理其他的TCP請求了 。
所以可以利用多線程,每個線程處理不同的TCP請求 。這樣程序就不會“阻塞”掉了 。
多線程編程怎么回事?。浚?/h3> 每個正在系統上運行的程序都是一個進程 。每個進程包含一到多個線程 。進程也可能是整個程序或者是部分程序的動態執行 。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨立執行 。也可以把它理解為代碼運行的上下文 。所以線程基本上是輕量級的進程,它負責在單個程序里執行多任務 。通常由操作系統負責多個線程的調度和執行 。
什么是多線程?
多線程是為了使得多個線程并行的工作以完成多項任務,以提高系統的效率 。線程是在同一時間需要完成多項任務的時候被實現的 。
使用線程的好處有以下幾點:
·使用線程可以把占據長時間的程序中的任務放到后臺去處理
·用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度
·程序的運行速度可能加快
·在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了 。在這種情況下我們可以釋放一些珍貴的資源如內存占用等等 。
還有其他很多使用多線程的好處,這里就不一一說明了 。
一些線程模型的背景
我們可以重點討論一下在Win32環境中常用的一些模型 。
·單線程模型
在這種線程模型中,一個進程中只能有一個線程,剩下的進程必須等待當前的線程執行完 。這種模型的缺點在于系統完成一個很小的任務都必須占用很長的時間 。
·塊線程模型(單線程多塊模型STA)
這種模型里,一個程序里可能會包含多個執行的線程 。在這里,每個線程被分為進程里一個單獨的塊 。每個進程可以含有多個塊 , 可以共享多個塊中的數據 。程序規定了每個塊中線程的執行時間 。所有的請求通過Windows消息隊列進行串行化,這樣保證了每個時刻只能訪問一個塊,因而只有一個單獨的進程可以在某一個時刻得到執行 。這種模型比單線程模型的好處在于,可以響應同一時刻的多個用戶請求的任務而不只是單個用戶請求 。但它的性能還不是很好,因為它使用了串行化的線程模型,任務是一個接一個得到執行的 。
·多線程塊模型(自由線程塊模型)
多線程塊模型(MTA)在每個進程里只有一個塊而不是多個塊 。這單個塊控制著多個線程而不是單個線程 。這里不需要消息隊列,因為所有的線程都是相同的塊的一個部分,并且可以共享 。這樣的程序比單線程模型和STA的執行速度都要塊,因為降低了系統的負載,因而可以優化來減少系統idle的時間 。這些應用程序一般比較復雜,因為程序員必須提供線程同步以保證線程不會并發的請求相同的資源,因而導致競爭情況的發生 。這里有必要提供一個鎖機制 。但是這樣也許會導致系統死鎖的發生 。
多線程編程的好處及在什么情況下用多線程CPU是以時間片的方式為進程分配CUP處理時間的,當一個進程以同步的方式去完成幾件事情時,此進程必須完成了第一件事情以后再做第二件事,如此按順序地向CPU請求完成要做的事情 。在此單線程的工作模式下,如果把CUP看作是一共有100個時間片的話,CPU可能一直都只是花了其中的10個時間片來處理當前進程所要做的事情,只是用到了CPU的10%的時間片,而其他時間都白白浪費了,當然,實際上CPU的工作模式還是做完一件事以后再去做另一件事,只是CUP的處理速度非常快 , 很快就處理完成所請求的情事 。
為了提高CPU的使用率,采用多線程的方式去同時完成幾件事情而互不干擾 , 如當前進程要完成三件事情1、2、3 , 那么CPU會分別用10%的時間來同時處理這3件事情,從而讓CPU的使用率達到了30% , 大大地提高了CPU的利用率 。多線程的好處在處理一些特殊的場合其優勢尤其明顯 。比如下載文件,你要一邊下載一邊顯示進度一邊保存,在這種情況下,如果沒有用多線程的話,沒有意外的話一般都會把主線程阻塞 , 比如進度條的進度根本沒有隨著已下載的量而變化,堪至是整個窗體都動不了,用多線程就可以很好地解決這個問題 。
這里有一個生活實例可能更好地去理解多線程:回去看你女朋友做飯,正常的話她都會把洗好的菜(肉)先放到鍋里煮,然后一邊洗別的菜或處理別的事情,如:洗碗、收拾桌臺準備開飯,人還是一個人,但她同時做幾件事情,這樣就可以大大地提高效率 。總的一句話就是:CPU還是要花同樣多的時間去完成所有的事情,但多線程可以讓CPU摻插地同時做多件事情 , 在視覺上讓用戶覺得計算機在同時幫他處理多件事情,更好地改善用戶體驗 。
了解了多線程的好處以后,就要了解應該在什么樣的情況下使用多線程技術 。因為并不是說所有情況下用多線程都是好事,因為多線程的情況下 , CPU還要花時間去維護,CPU處理各線程的請求時在線程間的切換也要花時間,所以一般情況下是可以不用多線程的,用了有時反而會得不償失 。大多情況下,要用到多線程的主要是需要處理大量的IO操作時或處理的情況需要花大量的時間等等 , 比如:讀寫文件、視頻圖像的采集、處理、顯示、保存等 。
java中什么叫做線程?什么叫多線程?多線程的特點是什么?線程的概念:Thread每個正在系統上運行的程序都是一個進程 。每個進程包含一到多個線程 。進程也可能是整個程序或者是部分程序的動態執行 。多線程的概念:多線程是為了同步完成多項任務,不是為了提高運行效率 , 而是為了提高資源使用效率來提高系統的效率 。多線程的特點:使用線程可以把占據長時間的程序中的任務放到后臺去處理用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度。程序的運行速度可能加快·在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了 。在這種情況下我們可以釋放一些珍貴的資源如內存占用等等 。線程定義比較抽象,簡單的說就是一個代碼執行流 。許多執行流可以混合在一起由CPU調度 。線程是允許各種任務交互執行的方式 。Java的線程在操作系統的實現模式依系統不同而不同,可能是系統級別的進程或線程,但對于程序員來說并沒有影響 。任務交互的一個好處是增加程序響應 。如一個界面程序執行一段耗時的數據庫查詢,使用單獨的線程可以讓界面依然響應用戶的其他輸入,而單線程只能等待查詢結束再處理 。JVM以及操作系統會優先處理優先級別高的線程,但不代表這些線程一定會先完成 。設定優先級只能建議系統更快的處理,而不能強制 。另外,在運行時 , 并沒有按照函數分界,而是按照機器碼/匯編碼分界 。也就是說不保證任何一段代碼是被完整而不打斷的執行的(除非你已經使用同步手段) 。正由于如此,各種線程同步的方法應運而生 。
Java多線程是什么意思?Java多線程實現方式主要有三種:繼承Thread類、實現Runnable接口、使用ExecutorService、Callable、Future實現有返回結果的多線程 。其中前兩種方式線程執行完后都沒有返回值,只有最后一種是帶返回值的 。1、繼承Thread類實現多線程繼承Thread類的方法盡管被我列為一種多線程實現方式,但Thread本質上也是實現了Runnable接口的一個實例,它代表一個線程的實例,并且 , 啟動線程的唯一方法就是通過Thread類的start()實例方法 。start()方法是一個native方法,它將啟動一個新線程,并執行run()方法 。這種方式實現多線程很簡單 , 通過自己的類直接extend Thread,并復寫run()方法,就可以啟動新線程并執行自己定義的run()方法 。例如:在合適的地方啟動線程如下:2、實現Runnable接口方式實現多線程如果自己的類已經extends另一個類,就無法直接extends Thread,此時,必須實現一個Runnable接口,如下:為了啟動MyThread,需要首先實例化一個Thread,并傳入自己的MyThread實例:事實上,當傳入一個Runnable target參數給Thread后,Thread的run()方法就會調用target.run(),參考JDK源代碼:3、使用ExecutorService、Callable、Future實現有返回結果的多線程ExecutorService、Callable、Future這個對象實際上都是屬于Executor框架中的功能類 。想要詳細了解Executor框架的可以訪問http://www.javaeye.com/topic/366591,這里面對該框架做了很詳細的解釋 。返回結果的線程是在JDK1.5中引入的新特征,確實很實用,有了這種特征我就不需要再為了得到返回值而大費周折了,而且即便實現了也可能漏洞百出 。可返回值的任務必須實現Callable接口,類似的,無返回值的任務必須Runnable接口 。執行Callable任務后,可以獲取一個Future的對象 , 在該對象上調用get就可以獲取到Callable任務返回的Object了,再結合線程池接口ExecutorService就可以實現傳說中有返回結果的多線程了 。下面提供了一個完整的有返回結果的多線程測試例子,在JDK1.5下驗證過沒問題可以直接使用 。代碼如下:代碼說明:上述代碼中Executors類,提供了一系列工廠方法用于創先線程池 , 返回的線程池都實現了ExecutorService接口 。public static ExecutorService newFixedThreadPool(int nThreads) 創建固定數目線程的線程池 。public static ExecutorService newCachedThreadPool() 創建一個可緩存的線程池,調用execute 將重用以前構造的線程(如果線程可用) 。如果現有線程沒有可用的,則創建一個新線程并添加到池中 。終止并從緩存中移除那些已有 60 秒鐘未被使用的線程 。public static ExecutorService newSingleThreadExecutor() 創建一個單線程化的Executor 。public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) 創建一個支持定時及周期性的任務執行的線程池,多數情況下可用來替代Timer類 。總結:ExecutoreService提供了submit()方法,傳遞一個Callable,或Runnable,返回Future 。如果Executor后臺線程池還沒有完成Callable的計算,這調用返回Future對象的get()方法 , 會阻塞直到計算完成 。
在java中,多線程真的是多個線程同時運行嗎??多CPU當然是真多線程 。就是CPU可能同時在執行4個線程 。
但是不是多核也沒關系 。因為線程的執行往往會掛起 , 等待IO之類 。這時候CPU會轉到別的線程來執行 。這是分時系統的一大特征 。當然人是感覺不到的 。
用多線程,比如你的處理分為兩大部分,一部分產生數據 , 一部分顯示數據,產生數據比較耗時 。(生產者消費者模型) 。這個時候用多線程,一個來產生數據 , 一個來顯示數據 。對于界面來說就不會在處理產生數據的時候產生假死的現象 。
希望能幫到你 。
java中多線程地并發運行是什么意思?有什么作用.好處?多線程的并發運行就相當一邊干這一邊干那,可以同時處理2個行為邏輯 。
多線程cpu有什么好處多線程是為了使得多個線程并行的工作以完成多項任務 , 以提高系統的效率 。線程是在同一時間需要完成多項任務的時候被實現的 。好處:·使用線程可以把占據長時間的程序中的任務放到后臺去處理程序的運行速度可能加快在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了,在這種情況下我們可以釋放一些珍貴的資源如內存占用等等 。最關鍵的一點,多線程可以讓同一個程序的不同部分并發執行CPU多線程同簡稱SMT 。SMT可通過復制處理器上的結構狀態,讓同一個處理器上的多個線程同步執行并共享處理器的執行資源,可最大限度地實現寬發射、亂序的超標量處理,提高處理器運算部件的利用率 , 緩和由于數據相關或Cache未命中帶來的訪問內存延時 。當沒有多個線程可用時,SMT處理器幾乎和傳統的寬發射超標量處理器一樣 。
多線程的程序有什么好處?多線程(英語:multithreading) , 是指從軟件或者硬件上實現多個線程并發執行的技術 。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程,進而提升整體處理性能 。具有這種能力的系統包括對稱多處理機、多核心處理器以及芯片級多處理(Chip-level multithreading)或同時多線程(Simultaneous multithreading)處理器 。[1]在一個程序中,這些獨立運行的程序片段叫作“線程”(Thread) , 利用它編程的概念就叫作“多線程處理(Multithreading)” 。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程(臺灣譯作“執行緒”),進而提升整體處理性能 。
優點:
1·使用線程可以把占據時間長的程序中的任務放到后臺去處理
2·用戶界面可以更加吸引人 , 這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度
3·程序的運行速度可能加快
4·在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了 。在這種情況下可以釋放一些珍貴的資源如內存占用等等 。
5.多線程技術在IOS軟件開發中也有舉足輕重的位置 。
缺點:
1如果有大量的線程,會影響性能,因為操作系統需要在它們之間切換 。
2·更多的線程需要更多的內存空間 。
3·線程可能會給程序帶來更多“bug”,因此要小心使用 。
4·線程的中止需要考慮其對程序運行的影響 。
多線程的程序有什么好處多線程(英語:multithreading),是指從軟件或者硬件上實現多個線程并發執行的技術 。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程 , 進而提升整體處理性能 。具有這種能力的系統包括對稱多處理機、多核心處理器以及芯片級多處理(Chip-level multithreading)或同時多線程(Simultaneous multithreading)處理器 。[1]在一個程序中,這些獨立運行的程序片段叫作“線程”(Thread) , 利用它編程的概念就叫作“多線程處理(Multithreading)” 。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程(臺灣譯作“執行緒”),進而提升整體處理性能 。
優點:
1·使用線程可以把占據時間長的程序中的任務放到后臺去處理
2·用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某些事件的處理 , 可以彈出一個進度條來顯示處理的進度
3·程序的運行速度可能加快
4·在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了 。在這種情況下可以釋放一些珍貴的資源如內存占用等等 。
5.多線程技術在IOS軟件開發中也有舉足輕重的位置 。
缺點:
1如果有大量的線程,會影響性能,因為操作系統需要在它們之間切換 。
2·更多的線程需要更多的內存空間 。
3·線程可能會給程序帶來更多“bug”,因此要小心使用 。
4·線程的中止需要考慮其對程序運行的影響 。
多線程cpu有什么好處java線程調度CPU對于各個線程的調度是隨機的(分時調度),在Java程序中,JVM負責線程的調度 。線程調度是指按照特定的機制為多個線程分配CPU的使用權,也就是實際執行的時候是線程,因此CPU調度的最小單位是線程 , 而資源分配的最小單位是進程 。JVM調度的模式有兩種:分時調度和搶占式調度 。分時調度 是所有線程輪流獲得CPU使用權,并平均分配每個線程占用CPU的時間;搶占式調度 是根據線程的優先級別來獲取CPU的使用權 。JVM的線程調度模式采用了搶占式模式 。既然是搶占調度,那么我們就能通過設置優先級來“有限”的控制線程的運行順序 , 注意“有限”一次 。CPU核數 跟多線程 的關系要說多線程就離不開進程,進程和線程的區別在這里就不詳細說了,只將關鍵的幾點:a)進程之間是 相互獨立的,不共享 內存和數據,線程之間 的內存和數據是 公用的 , 每個線程只有自己的一組CPU指令、寄存器和堆棧,對于線程來說只有CPU里的東西是自己獨享的,程序中的其他東西都是跟同一個進程里的其他線程共享的 。b)操作系統創建進程時要分配好多外部資源,所以開銷大 。(這個跟操作系統有關,有人做過實驗,window創建進程的開銷大,Linux創建進程的開銷就很小 。)再來說一下CPU,過去單CPU時代,最先是單任務階段 在一個時間點 只能執行單一程序 。之后發展到多任務階段,計算機能在同一時間點并行執行多任務或多進程 。雖然并不是真正意義上的“同一時間點”,而是多個任務或進程共享一個CPU,并交由操作系統來完成多任務間對CPU的運行切換,以使得每個任務都有機會獲得一定的時間片運行 。而現在多核CPU的情況下,同一時間點可以執行多個任務(并行),具體到這個任務在CPU哪個核上運行,這個就跟操作系統和CPU本身的設計相關了 。我們假設一個極端的情況:在一臺單核計算機上只運行2個程序,一個是我們的程序A,另一個是操作系統的程序B,每個程序是一個進程 。單核CPU的時候,A和B在CPU上交替運行 , 具體的分配方式由操作系統來判斷,我這里猜測應該跟A和B的線程數有關,因為線程是CPU級別的,如果A有5個線程,B也有5個線程,那么CPU分配給A和B的時間應該是1:1的;如果A增加到15個線程,CPU分配給A和B的時間應該是3:1的比例 。所以此時如果A的線程數多,那么獲得的CPU執行次數就多 , 處理的速度也就快了 。以上假設的前提是:①A和B的優先級相同,②A和B都是只消耗CPU資源的程序 。如果相同的情況用一個雙核的計算機來處理又會是什么結果呢?假設這個雙核的計算機和操作系統比較傻,把A進程分配到核1上 , B進程分配到核2上,那不管A有幾個線程,都是用核1來處理,那么時間肯定是一樣的 。不過現實中應該不會有這么傻的CPU和操作系統吧 。所以趕緊還是會根據線程來進行處理 , 當A的線程比B多時,會占用核2來處理A的線程 。剛才說的是只消耗CPU資源的程序,但這樣的程序在實際應用中基本上是沒有的,總會有跟資源打交道的 。比如讀個文件,查個數據庫 , 訪問一個網絡連接等等 。這個時候多線程才真正體現出優勢,在一個進程中 , 線程a去讀文件,線程b去查數據庫 , 線程c去訪問網絡,a先用一下CPU,然后去讀文件 , 此時CPU空閑,b就用一下,然后去查數據庫,相對于讀文件、查數據庫、訪問網絡來說CPU計算的時間幾乎可以忽略不計,所以多線程實際上是計算機多種資源的并行運用,跟CPU有幾個核心是沒什么關系的 。
- qq飛車論壇
- 計算機多媒體技術
- 絲襪長霉斑怎么洗掉 絲襪長霉斑有什么去除方法
- 其他垃圾應該投入什么顏色的垃圾桶 其他垃圾的垃圾桶是什么顏色
- 樹葉可以用來做什么 樹葉的用途
- 什么是路由器
- 運行時錯誤1004
- rp是什么意思
- 送男生沙漏代表什么 給男生送沙漏代表什么意思
- 一鍵還原ghost
