thinkphp5框架載入流程
阿新 • • 發佈:2020-09-16
0.多執行緒重點:執行緒實現 執行緒同步
1.執行緒簡介
多工:同時做多個事情,看起來是多個任務都在做,其實本質上我們的大腦在同一時間內只做一件事。
多執行緒例子:一條車道,車太多,會造成道路堵塞,效率極低,為了提高效率,充分利用道路,於是加了多個車道。
生活中的多執行緒例子:打遊戲與朋友開黑
普通方法呼叫和多執行緒的區別
程式,程序,執行緒
程序:在作業系統中執行的程式就是程序,比如QQ,遊戲,IDEA
一個程序可以有多個執行緒,如視訊中同時可以聽到聲音,看到影象和彈幕等等
程式是指令和資料的有序集合,其本身沒有任何執行的含義,是一個靜態的概念。
程序(Process):程序是執行程式的一次執行過程,它是一個動態的概念。是系統資源分配的單位。
通常在一個程序中可以包含若干個執行緒,當然一個程序中至少有一個執行緒,不然沒有存在的意義。執行緒是CPU排程和執行的單位。
注意:很多多執行緒是模擬出來的,真正的多執行緒是指有多個CPU,即多核,如伺服器。
如果是模擬出來的多執行緒,即在一個CPU的情況下,在同一時間點,CPU只能執行一個程式碼,因為切換的很快,所有就有同事執行的錯覺。
執行緒核心概念
- 執行緒是獨立的執行路徑
- 在程式執行時,即使沒有自己建立執行緒,後臺也會有多個執行緒,如主執行緒,GC執行緒
- main()稱之為主執行緒,為系統的入口,用於執行整個程式
- 在一個程序中,如果開闢了多個執行緒,執行緒的執行由排程器(CPU)安排排程,排程器是與作業系統緊密相關的,先後順序是不能人為的干預
- 對同一份資源操作時,會存在資源搶奪的問題,需要加入併發控制。
- 執行緒會帶來額外的開銷,如CPU排程時間,併發控制開銷
- 每個執行緒在自己的工作記憶體互動,記憶體控制不當會造成資料不一致
2.執行緒建立
執行緒建立的三種方式
- 繼承Thread類
- 實現Runnable介面
- 實現Callable介面
1.繼承Thread
- 自定義執行緒類繼承Thread
- 重寫run()方法,編寫執行緒執行體
- 建立執行緒物件,呼叫start()方法啟動執行緒
1 /* 2 * 建立執行緒方式一:繼承Thread類,重寫run()方法,呼叫start開啟執行緒 3 * */ 4 public class TestThread1 extendsThread{ 5 @Override 6 public void run() { 7 //run方法執行緒體 8 for (int i = 0; i < 200; i++) { 9 System.out.println("我在看程式碼--"+i); 10 } 11 } 12 13 public static void main(String[] args) { 14 //main執行緒 主執行緒 15 //建立一個執行緒物件 16 TestThread1 testThread1 = new TestThread1(); 17 //呼叫start()方法開啟執行緒 18 testThread1.start(); 19 for (int i = 0; i < 1000; i++) { 20 System.out.println("我在學習多執行緒"+i); 21 } 22 } 23 }
說明兩個執行緒是同時執行的
執行緒不一定立即執行,CPU安排排程
Process