多執行緒初識

2022-09-14 18:47:30 字數 2832 閱讀 8809

先了解什麼是應用程式,應用程式就是類似qq,360可執行的應用程式,在乙個應用程式中,都會有程序。

什麼是程序,程序中有多個不同的執行路徑,多個執行緒的集合。程序是執行中的程式。

什麼是執行緒,乙個執行順序,乙個執行流程,執行路徑。每個執行緒互不影響,因為都在自己獨立執行。

總結:程序就是執行的程式,它是執行緒的集合,執行緒就是獨立執行的一條執行路徑。什麼是多執行緒?就是為了提高程式的效率

下面比較好了解,乙個程序有多個執行緒會提高效率、

執行緒的兩個分類

守護執行緒和非守護執行緒,守護執行緒(使用者執行緒)隨著主線程一起消失,而非守護執行緒不會被影響到。

多執行緒的狀態:

執行緒從建立、執行到結束總是處於下面五個狀態之一:新建狀態、就緒狀態、執行狀態、阻塞狀態及死亡狀態。

當用new操作符建立乙個執行緒時, 例如new thread(r),執行緒還沒有開始執行,此時執行緒處在新建狀態。 當乙個執行緒處於新生狀態時,程式還沒有開始執行執行緒中的**

乙個新建立的執行緒並不自動開始執行,要執行執行緒,必須呼叫執行緒的start()方法。當執行緒物件呼叫start()方法即啟動了執行緒,start()方法建立執行緒執行的系統資源,並排程執行緒執行run()方法。當start()方法返回後,執行緒就處於就緒狀態。

處於就緒狀態的執行緒並不一定立即執行run()方法,執行緒還必須同其他執行緒競爭cpu時間,只有獲得cpu時間才可以執行執行緒。因為在單cpu的計算機系統中,不可能同時執行多個執行緒,乙個時刻僅有乙個執行緒處於執行狀態。因此此時可能有多個執行緒處於就緒狀態。對多個處於就緒狀態的執行緒是由j**a執行時系統的執行緒排程程式(thread scheduler)來排程的。

當執行緒獲得cpu時間後,它才進入執行狀態,真正開始執行run()方法.

執行緒執行過程中,可能由於各種原因進入阻塞狀態:

1>執行緒通過呼叫sleep方法進入睡眠狀態;

2>執行緒呼叫乙個在i/o上被阻塞的操作,即該操作在輸入輸出操作完成之前不會返回到它的呼叫者;

3>執行緒試圖得到乙個鎖,而該鎖正被其他執行緒持有;

4>執行緒在等待某個觸發條件;

有兩個原因會導致執行緒死亡:

1) run方法正常退出而自然死亡,

2) 乙個未捕獲的異常終止了run方法而使執行緒猝死。

為了確定執行緒在當前是否存活著(就是要麼是可執行的,要麼是被阻塞了),需要使用isalive方法。如果是可執行或被阻塞,這個方法返回true; 如果執行緒仍舊是new狀態且不是可執行的, 或者執行緒死亡了,則返回false.

執行緒的建立方式

package com.mydream.cn;

/** *

* @title: threaddemo.j**a

* @package com.mydream.cn

* @description: 繼承方式 實現多執行緒

* @author licl

* @date 2023年7月25日

*/class demo extends thread

}}/**

* * @title: threaddemo.j**a

* @package com.mydream.cn

* @description: 實現runnable 介面方式

* @author licl

* @date 2023年7月25日

*/class runnabledemo implements runnable }

}public class threaddemo

// 匿名內部類方式實現

new thread(new runnable()

}}){}.start();;

}}

1,繼承thread類

2,實現runnable介面

簡單的說一下thread的join方法

package com.mydream.cn;

class demojoin implements runnable }}

public class threadjoin

}}

結果圖 

經典面試題

現在有t1、t2、t3三個執行緒,你怎樣保證t2在t1執行完後執行,t3在t2執行完後執行 

package com.mydream.cn;

// 要求 執行順序為 t1 t2 t3

class demojoin implements runnable }}

public class threadjoin

}});

t1.start();

thread t2 = new thread(new runnable() catch (interruptedexception e)

for (int i = 0; i <= 10; i++)

}});

t2.start();

thread t3 = new thread(new runnable() catch (interruptedexception e)

for (int i = 0; i <= 10; i++)

}});

t3.start();

}}

重點理解join放的位置,理解join的含義。

多執行緒初識

多執行緒cpu 程式 指令集合 程序 程式執行過程 ctrl alt delete 執行緒 指令執行最小單位 執行緒安全 慢 同步 非執行緒安全 執行緒不安全 快 非同步 繼承方式實現多執行緒 執行緒幾種狀態 生命週期 建立狀態 就緒狀態 執行狀態 死亡狀態 掛起狀態 執行緒鎖 互斥鎖 lock i...

初識多執行緒問題

在多執行緒程式中,新建立的執行緒不能訪問ui執行緒建立的視窗控制項,如果需要訪問視窗中的控制項,有以下解決辦法 1.可以在視窗建構函式中將checkforillegalcrossthreadcalls設定為 false public form1 2.使用委託呼叫 宣告委託 private deleg...

java多執行緒初識4

程序的概念 程序 官方的語言是計算機中的程式,關於某資料集合上的一次執行活動。使系統進行資源分配和排程的基本單位單位,是作業系統的基本單位,是作業系統結構的基礎。在現在的執行緒設計的計算機結構中,程序是執行緒的容器,程式是指令資料及組織形式的描述,程序是程式的實體,但是總的來說 程序是執行緒的容器。...