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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Thread线程

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

多線程


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

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

進程與線程的區別:

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

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

java.lang.Thread類,API中該類中定義了有關線程的一些方法,具體如下:
構造方法:

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

常用方法:

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

實現Runnable接口比繼承Thread類所具有的優勢:

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

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

    線程同步

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

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

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

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

    線程池概念

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

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

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

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

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

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

    Future接口:用來記錄線程任務執行完畢后產生的結果。線程池創建與使用。

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。