當前位置:才華齋>計算機>java語言>

Java多執行緒知識點介紹

java語言 閱讀(1.49W)

執行緒,有時被稱為輕量級程序(Lightweight Process,LWP),是程式執行流的最小單元。一個標準的執行緒由執行緒ID,當前指令指標(PC),暫存器集合和堆疊組成。Java多執行緒知識點介紹分享給大家,歡迎大家閱讀!

Java多執行緒知識點介紹

Java多執行緒知識點介紹

  一、概述

標題很抽象,什麼叫更簡單?更是相比誰來說的呢?

原來,我們定義任務,都是實現自Runnable或者Callable介面,但是這樣必然需要你將新定義的任務附著給執行緒,然後再呼叫執行緒啟動。在不考慮Executor的情況下,你會感覺這麼做很呆板,如果直接new一個任務物件,他自己就能啟動的話,是不是更好?這就是更簡單的執行緒這個標題的由來。

  二、實現

1.繼承自Thread

因為Thread實現了Runnable介面,所以繼承自Thread的類,實現其run方法,其中定義的也就是任務。

這樣做的好處是,可以直接呼叫父類的start方法,可以實現概述中要實現的效果

public class TaskExtendsThread extends Thread{ private int countDown = 5; private static int threadCount = 0; /* * 可以在它的構造方法裡直接呼叫run方法 */ public TaskExtendsThread(){ super(ring(++threadCount)); start(); } public String toString(){ return "#"+getName()+"("+countDown+")."; } public void run() { while(true){ tln(this); if(--countDown == 0 ) return ; } } public static void main(String[] args){ for(int i = 0 ;i < 5 ;i++) new TaskExtendsThread(); }

}

這樣,在new一個物件時就會讓你的任務自動附著給執行緒並啟動。

2.自管理的Runnable,實現Runnable介面。例如SelfManagedThread

既然已經有了Thread類的實現,為什麼還要有自管理Runnable呢?這樣做和繼承Thread沒有區別,只是這樣做會讓你的類更靈活,實現了該類還可以繼承其他你想讓他繼承的類。

public class SelfManagedThread implements Runnable{ private int countDown = 5; private Thread t = new Thread(this); /* * 在構造器中啟動執行緒可能會變得很有問題 * 因為另一個任務可能會在構造器結束之前開始執行,這意味著該任務能夠訪問處於不穩定狀態的物件 */ public SelfManagedThread(){ t(); } public String toString(){ return entThread()ame()+"("+countDown+")."; } @Override public void run() { while(true){ tln(this); if(--countDown==0) return; } } public static void main(String[] args){ for(int i = 0; i < 5 ;i++) new SelfManagedThread(); }

}

  三、然並卵

這個大標題起的很好,因為目前為止,只知道這兩種方式,都是在構造器中啟動執行緒的,這可能會變的很有問題,因為另一個任務可能會在構造器結束之前開始執行,這意味著該任務可能訪問處於不穩定狀態的物件.故:優選Executor而不是顯示地建立Thread物件的一個原因,但是也不能說這樣的解決方式完全沒有用,待有朋友看到文章後給些提示……

  四、執行緒的`術語

至此,關於執行緒的實現,大部分總結完了,剩下的就是競爭資源、執行緒同步等併發方面的問題了。所以,在此總結下執行緒的術語

術語

|——執行緒並不是任務,執行緒不做任何事情只是驅動附著給它的任務執行

|——Runnable介面理解:可以理解為該方法的反型封裝,即它執行能做的事情

|——其實任務應該實現一個名為Task的介面,這樣更容易理解java中的執行緒

|——從概念上講:我們希望建立獨立於其他任務執行的任務,因此我們應該能夠定義任務,然後說“開始”,並且不用操心細節。

|——java的執行緒機制基於來自c的低階的p執行緒方式,這事你必須深入研究,並且需要完全理解其所有事務的所有細節的方式,這種低階特性部分地滲入 了java的實現中,因此為了處於更高的抽象級別,在編寫程式碼時,你必須遵循規則

|——任務:在描述將要執行的工作時使用術語“任務”;在引用到驅動任務的具體機制時,使用屬於“執行緒”