先了解什麼是應用程式,應用程式就是類似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
程序的概念 程序 官方的語言是計算機中的程式,關於某資料集合上的一次執行活動。使系統進行資源分配和排程的基本單位單位,是作業系統的基本單位,是作業系統結構的基礎。在現在的執行緒設計的計算機結構中,程序是執行緒的容器,程式是指令資料及組織形式的描述,程序是程式的實體,但是總的來說 程序是執行緒的容器。...