日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Thread线程

發(fā)布時間:2025/3/19 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Thread线程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

多線程


● 并行:指兩個或多個事件在同一時刻發(fā)生(同時發(fā)生)。
● 并發(fā):指兩個或多個事件在同一個時間段內(nèi)發(fā)生。

線程與進程
● 進程:是指一個內(nèi)存中運行的應(yīng)用程序,每個進程都有一個獨立的內(nèi)存空間,一個應(yīng)用程序可以同時運行多個進程;進程也是程序的一次執(zhí)行過程,是系統(tǒng)運行程序的基本單位;系統(tǒng)運行一個程序即是一個進程從創(chuàng)建、運行到消亡的過程。就是.exe文件,一個應(yīng)用程序可以有多個進程,每個進程都有一個獨立的內(nèi)存空間
一個進程可以看出一個單核cpu,而我們的java程序就是一個進程,所以我們接下來線程的多線程,就是多線程并發(fā)
● 線程:進程內(nèi)部的一個獨立執(zhí)行單元;一個進程可以同時并發(fā)的運行多個線程,可以理解為一個進程便相當于一個單 CPU 操作系統(tǒng),而線程便是這個系統(tǒng)中運行的多個任務(wù)。

進程與線程的區(qū)別:

● 進程:有獨立的內(nèi)存空間,進程中的數(shù)據(jù)存放空間(堆空間和棧空間)是獨立的,至少有一個線程。● 線程:堆空間是共享的,棧空間是獨立的,線程消耗的資源比進程小的多。

線程調(diào)度:
計算機通常只有一個CPU時,在任意時刻只能執(zhí)行一條計算機指令,每一個進程只有獲得CPU的使用權(quán)才能執(zhí)行指令。所謂多進程并發(fā)運行,從宏觀上看,其實是各個進程輪流獲得CPU的使用權(quán),分別執(zhí)行各自的任務(wù)。那么,在可運行池中,會有多個線程處于就緒狀態(tài)等到CPU, JVM 就負責了線程的調(diào)度。JVM采用的是搶占式調(diào)度,沒有采用分時調(diào)度,因此可以能造成多線程執(zhí)行結(jié)果的的隨機性。

java.lang.Thread類,API中該類中定義了有關(guān)線程的一些方法,具體如下:
構(gòu)造方法:

public Thread():分配一個新的線程對象。● public Thread(String name):分配一個指定名字的新的線程對象。● public Thread(Runnable target):分配一個帶有指定目標新的線程對象。● public Thread(Runnable target,String name):分配一個帶有指定目標新的線程對象并指定名字。

常用方法:

public String getName():獲取當前線程名稱。● public static Thread currentThread():返回對當前正在執(zhí)行的線程對象的引用。● public void start():導致此線程開始執(zhí)行; Java虛擬機調(diào)用此線程的run方法。● public void run():此線程要執(zhí)行的任務(wù)在此處定義代碼。● public static void sleep(long millis):使當前正在執(zhí)行的線程以指定的毫秒數(shù)暫停(暫時停止執(zhí)行)

實現(xiàn)Runnable接口比繼承Thread類所具有的優(yōu)勢:

  • 適合多個相同的程序代碼的線程去共享同一個資源。
  • 可以避免java中的單繼承的局限性。
  • 增加程序的健壯性,實現(xiàn)解耦操作,代碼可以被多個線程共享,代碼和線程獨立。
  • 線程池只能放入實現(xiàn)Runable或Callable類線程,不能直接放入繼承Thread的類。
  • 線程安全

    線程安全問題都是由全局變量及靜態(tài)變量引起的。若每個線程中對全局變量、靜態(tài)變量只有讀操作,而無寫操作,一般來說,這個全局變量是線程安全的;若有多個線程同時執(zhí)行寫操作,一般都需要考慮線程同步,否則的話就可能影響線程安全。

    線程同步

    有三種方式完成同步操作: 1. 同步代碼塊。 同步代碼塊:synchronized關(guān)鍵字可以用于方法中的某個區(qū)塊中,表示只對這個區(qū)塊的資源實行互斥訪問。 ```java synchronized (同步鎖) { } ```
  • 同步方法。
    同步方法:使用synchronized修飾的方法,就叫做同步方法,保證A線程執(zhí)行該方法的時候,其他線程只能在方法外等著。
  • public synchronized void method(){可能會產(chǎn)生線程安全問題的代碼 }
  • 鎖機制。
  • public void lock():加同步鎖。 public void unlock():釋放同步鎖。

    同步鎖:
    同步鎖是誰?
    對于非static方法,同步鎖就是this。
    對于static方法,我們使用當前方法所在類的字節(jié)碼對象(類名.class)。

    對象的同步鎖只是一個概念,可以想象為在對象上標記了一個鎖.

  • 鎖對象 可以是任意類型。
  • 多個線程對象 要使用同一把鎖。
  • 線程狀態(tài)導致狀態(tài)發(fā)生條件
    NEW(新建)線程剛被創(chuàng)建,但是并未啟動。還沒調(diào)用start方法。
    Runnable(可運行)線程可以在java虛擬機中運行的狀態(tài),可能正在運行自己代碼,也可能沒有,這取決于操作系統(tǒng)處理器。
    Blocked(鎖阻塞)當一個線程試圖獲取一個對象鎖,而該對象鎖被其他的線程持有,則該線程進入Blocked狀態(tài);當該線程持有鎖時,該線程將變成Runnable狀態(tài)。
    Waiting(無限等待)一個線程在等待另一個線程執(zhí)行一個(喚醒)動作時,該線程進入Waiting狀態(tài)。通過wait()方法進入這個狀態(tài)后是不能自動喚醒的,必須等待另一個線程調(diào)用notify或者notifyAll方法才能夠喚醒。
    Timed Waiting(計時等待)同waiting狀態(tài),有幾個方法有超時參數(shù),調(diào)用他們將進入Timed Waiting狀態(tài)。這一狀態(tài)將一直保持到超時期滿或者接收到喚醒通知。帶有超時參數(shù)的常用方法有Thread.sleep 、Object.wait。
    Teminated(被終止)因為run方法正常退出而死亡,或者因為沒有捕獲的異常終止了run方法而死亡。

    線程池概念

    線程池:其實就是一個容納多個線程的容器,其中的線程可以反復使用,省去了頻繁創(chuàng)建線程對象的操作,無需反復創(chuàng)建線程而消耗過多資源。

    合理利用線程池能夠帶來三個好處:

  • 降低資源消耗。減少了創(chuàng)建和銷毀線程的次數(shù),每個工作線程都可以被重復利用,可執(zhí)行多個任務(wù)。
  • 提高響應(yīng)速度。當任務(wù)到達時,任務(wù)可以不需要的等到線程創(chuàng)建就能立即執(zhí)行。
  • 提高線程的可管理性。可以根據(jù)系統(tǒng)的承受能力,調(diào)整線程池中工作線線程的數(shù)目,防止因為消耗過多的內(nèi)存,而把服務(wù)器累趴下(每個線程需要大約1MB內(nèi)存,線程開的越多,消耗的內(nèi)存也就越大,最后死機)。
  • Executors類中有個創(chuàng)建線程池的方法如下:

    public static ExecutorService newFixedThreadPool(int nThreads)eg:ExecutorService esc = Executors.newFixedThreadPool(2);

    返回線程池對象。(創(chuàng)建的是有界線程池,也就是池中的線程個數(shù)可以指定最大數(shù)量)
    獲取到了一個線程池ExecutorService 對象,那么怎么使用呢,在這里定義了一個使用線程池對象的方法如下:

    public Future<?> submit(Runnable task):獲取線程池中的某一個線程對象,并執(zhí)行

    Future接口:用來記錄線程任務(wù)執(zhí)行完畢后產(chǎn)生的結(jié)果。線程池創(chuàng)建與使用。

    總結(jié)

    以上是生活随笔為你收集整理的Thread线程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。