1. 程式人生 > >多執行緒知識點整合

多執行緒知識點整合

一、什麼是執行緒?

    執行緒是程式執行流的最小單位。

二、什麼是程序?程序與執行緒的關係?

    程序是系統分配資源的最小單位。程序與執行緒的關係,是一對多的關係,一個程序可以包含多個執行緒。屬於同進程的執行緒們,共享程序的資源空間(程序的全域性變數和堆的資料),但是每個執行緒也有隻屬於自身的執行緒空間。

三、執行緒的狀態:

  1. 新建;
  2. 就緒;
  3. 執行;
  4. 阻塞;
  5. 終止。

四、多執行緒?

    多執行緒可以互不干擾的併發執行,並共享程序的全域性變數和堆的資料。提供程式的執行效率。

五、執行緒安全?意義?

    執行緒安全是針對多執行緒來說的。簡單的說,就是一個方法或者一個例項可以在多執行緒環境中使用而不會出現問題,結果與單執行緒執行的結果一致。

    多執行緒程式處於一個多變的環境中,可訪問的全域性變數和堆資料隨時都可能被其他的執行緒改變。因此多執行緒程式在併發時資料的一致性變得非常重要。

六、如何保證執行緒安全?

    1、執行緒同步。這裡所說的“同步”不是指傳統意義上類似資料同步的同步,而是協同步調的含義。即各個執行緒按照約定好的步調執行相應的程式。實現執行緒同步主要通過鎖機制實現(synchronized關鍵字和Lock介面)。

    2、ThreadLocal。簡單的說,即執行緒獨有的變數副本。當使用ThreadLocal維護變數時,ThreadLocal為每個使用該變數的執行緒提供獨立的變數副本,所以每一個執行緒都可以獨立地改變自己的副本,而不會影響其它執行緒所對應的副本。

    3、原子類。java.util.concurrent.atomic包下的類,基於CAS機制實現,效率高。

    4、併發集合類。java.util.concurrent包下的類,如ConcurrentHashMap、CopyOnWriteArrayList(HashTable、Vector,這兩種基本被淘汰)、ConcurrentLinkedQueue等等

七、synchronized?

synchronized是Java中的關鍵字,是一種同步鎖。它修飾的物件有以下幾種:
1. 修飾一個程式碼塊,被修飾的程式碼塊稱為同步語句塊,其作用的範圍是大括號{}括起來的程式碼,作用的物件是呼叫這個程式碼塊的物件;
2. 修飾一個方法,被修飾的方法稱為同步方法,其作用的範圍是整個方法,作用的物件是呼叫這個方法的物件;
3. 修改一個靜態的方法,其作用的範圍是整個靜態方法,作用的物件是這個類的所有物件;
4. 修改一個類,其作用的範圍是synchronized後面括號括起來的部分,作用主的物件是這個類的所有物件。

八、Lock介面?

     需要顯示指定起始位置和終止位置。一般使用ReentrantLock類做為鎖,多個執行緒中必須要使用一個ReentrantLock類做為物件才能保證鎖的生效。且在加鎖和解鎖處需要通過lock()和unlock()顯示指出。所以一般會在finally塊中寫unlock()以防死鎖。

九、執行緒間通訊?實現方式?

    定義多個執行緒在處理同一個資源,並且任務不同時,需要執行緒通訊來幫助解決執行緒之間對同一個變數的使用或操作。就是多個執行緒在操作同一份資料時, 避免對同一共享變數的爭奪

   意義:多個執行緒併發執行時, 在預設情況下CPU是隨機切換執行緒的,當我們需要多個執行緒來共同完成一件任務時,就需要執行緒之間進行通訊,協同工作,提高效率並降低不必要的資源競爭開銷。

   實現方案:等待喚醒機制:Java.lang.Object類中wait()notify()notifyAll()方法。