Java 給多線程編程提供了內置的支持。 一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發(fā)多個線程,每條線程并行執(zhí)行不同的任務。
成都創(chuàng)新互聯(lián)公司服務項目包括吳興網站建設、吳興網站制作、吳興網頁制作以及吳興網絡營銷策劃等。多年來,我們專注于互聯(lián)網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網行業(yè)的解決方案,吳興網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到吳興省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
新建狀態(tài):
使用 new 關鍵字和 Thread 類或其子類建立一個線程對象后,該線程對象就處于新建狀態(tài)。它保持這個狀態(tài)直到程序 start() 這個線程。
就緒狀態(tài):
當線程對象調用了start()方法之后,該線程就進入就緒狀態(tài)。就緒狀態(tài)的線程處于就緒隊列中,要等待JVM里線程調度器的調度。
運行狀態(tài):
如果就緒狀態(tài)的線程獲取 CPU 資源,就可以執(zhí)行 run(),此時線程便處于運行狀態(tài)。處于運行狀態(tài)的線程最為復雜,它可以變?yōu)樽枞麪顟B(tài)、就緒狀態(tài)和死亡狀態(tài)。
阻塞狀態(tài):
如果一個線程執(zhí)行了sleep(睡眠)、suspend(掛起)等方法,失去所占用資源之后,該線程就從運行狀態(tài)進入阻塞狀態(tài)。在睡眠時間已到或獲得設備資源后可以重新進入就緒狀態(tài)。可以分為三種:
等待阻塞:運行狀態(tài)中的線程執(zhí)行 wait() 方法,使線程進入到等待阻塞狀態(tài)。
同步阻塞:線程在獲取 synchronized 同步鎖失敗(因為同步鎖被其他線程占用)。
其他阻塞:通過調用線程的 sleep() 或 join() 發(fā)出了 I/O 請求時,線程就會進入到阻塞狀態(tài)。當sleep() 狀態(tài)超時,join() 等待線程終止或超時,或者 I/O 處理完畢,線程重新轉入就緒狀態(tài)。
死亡狀態(tài):
一個運行狀態(tài)的線程完成任務或者其他終止條件發(fā)生時,該線程就切換到終止狀態(tài)。
這個沒辦法實現(xiàn)的。
如果是一小段代碼,那么只能說是順序執(zhí)行代碼中的內容(java代碼是順序執(zhí)行的)。
如果是想多個線程同時跑多次這段代碼,那么每次創(chuàng)建一個線程,之后直接通過方法調用這段代碼即可。
多線程:指的是這個程序(一個進程)運行時產生了不止一個線程
并行與并發(fā):
并行:多個cpu實例或者多臺機器同時執(zhí)行一段處理邏輯,是真正的同時。
并發(fā):通過cpu調度算法,讓用戶看上去同時執(zhí)行,實際上從cpu操作層面不是真正的同時。并發(fā)往往在場景中有公用的資源,那么針對這個公用的資源往往產生瓶頸,我們會用TPS或者QPS來反應這個系統(tǒng)的處理能力。
線程安全:經常用來描繪一段代碼。指在并發(fā)的情況之下,該代碼經過多線程使用,線程的調度順序不影響任何結果。這個時候使用多線程,我們只需要關注系統(tǒng)的內存,cpu是不是夠用即可。反過來,線程不安全就意味著線程的調度順序會影響最終結果,如不加事務的轉賬代碼:
請點擊輸入圖片描述
同步:Java中的同步指的是通過人為的控制和調度,保證共享資源的多線程訪問成為線程安全,來保證結果的準確。如上面的代碼簡單加入@synchronized關鍵字。在保證結果準確的同時,提高性能,才是優(yōu)秀的程序。線程安全的優(yōu)先級高于性能。
要說線程,就必須先說說進程,進程就是程序的運行時的一個實例。線程呢可以看作單獨地占有CPU時間來執(zhí)行相應的代碼的。對早期的計算機(如DOS)而言,線程既是進程,進程既是進程,因為她是單線程的。當然一個程序可以是多線程的,多線程的各個線程看上去像是并行地獨自完成各自的工作,就像一臺一臺計算機上運行著多個處理機一樣。在多處理機計算機上實現(xiàn)多線程時,它們確實可以并行工作,而且采用適當?shù)姆謺r策略可以大大提高程序運行的效率。但是二者還是有較大的不同的,線程是共享地址空間的,也就是說多線程可以同時讀取相同的地址空間,并且利用這個空間進行交換數(shù)據(jù)。
為什么要使用多線程呢?學過《計算機體系結構》的人都知道。將順序執(zhí)行程序和采用多線程并行執(zhí)行程序相比,效率是可以大大地提高的。比如,有五個線程thread1, thread2, thread3, thread4, thread5,所耗的CPU時間分別為4,5,1,2,7。(假設CPU輪換周期為4個CPU時間,而且線程之間是彼此獨立的)順序執(zhí)行需要花費19個CPU時間,而并行需要的時間肯定少于19個CPU時間,至于具體多少時間要看那些線程是可以同時執(zhí)行的。這是在非常小規(guī)模的情況下,要是面對大規(guī)模的進程之間的交互的話,效率可以表現(xiàn)得更高。
與其他語言不一樣的是,線程的觀念在java是語言中是重要的,根深蒂固的,因為在java語言中的線程系統(tǒng)是java語言自建的, java中有專門的支持多線程的API庫,所以你可以以最快的速度寫一個支持線程的程序。在使用java創(chuàng)建線程的時候,你可以生成一個Thread類或者他的子類對象,并給這個對象發(fā)送start()消息(程序可以向任何一個派生自 Runnable 接口的類對象發(fā)送 start() 消息的),這樣一來程序會一直執(zhí)行,直到run返回為止,此時該線程就死掉了。
在java語言中,線程有如下特點:
§ 在一個程序中而言,主線程的執(zhí)行位置就是main。而其他線程執(zhí)行的位置,程序員是可以自定義的。值得注意的是對Applet也是一樣。
§ 每個線程執(zhí)行其代碼的方式都是一次順序執(zhí)行的。
§ 一個線程執(zhí)行其代碼是與其他線程獨立開來的。如果諸線程之間又相互協(xié)作的話,就必須采用一定的交互機制。
名稱欄目:linux計劃任務命令行,Linux 任務計劃
鏈接分享:http://muchs.cn/article6/hssjog.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供全網營銷推廣、品牌網站建設、網站維護、定制網站、虛擬主機、微信公眾號
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)