【掌握的】
1.兩種方式建立執行緒:(繼承,實現)
2.繼承和實現的區分
3.執行緒的生命週期
4.不同狀態下,所對應的方法。【通過哪些方法,可以讓執行緒達到某個狀態。】
5.同步**塊,同步方法。
1.學習多執行緒的原因?
生活中:
程式: 乙個完整的功能**。(方法,沒有被執行)
程序: 乙個完整的功能**。(方法,被執行)
執行緒: 程序包含執行緒。
好處:提高**的執行效率。總是有一些功能是需要同時執行的,那就需要多執行緒。
2.主線程:
-----執行main方法裡的**。
普通執行緒
------run 方法裡的**。
3.完成執行緒的步驟:
a. 編寫執行緒類:(1.通過繼承)
b. 重寫run方法:
c. 建立執行緒物件,呼叫start方法,開啟執行緒。
補充:(1) 執行緒物件.run(); 沒有開啟執行緒,只是在呼叫執行緒物件的run()方法。
執行緒物件.start(); 執行緒開啟的標誌,自動呼叫run()方法
(2) 呼叫start()方法就立刻執行run()方法嗎?
執行緒物件.start(); ----當前執行緒所處的狀態是「就緒狀態」
真正執行run();----當前執行緒所處的狀態是「執行狀態」
----「就緒狀態」 和「執行狀態」 之間,間隔多久,不清楚。
(3)執行緒 【預設命】和【指定名】。
普通執行緒的預設名:thread-變數 ----變數static的,從0開始計數
主線程預設名:main
// private string name; //1.接收外界傳入的引數,完成執行緒名。
// public thread1(string name)
public thread1(string name)
public void run()
}【2.通過實現完成執行緒】
a.編寫執行緒類:
b.。重寫run()方法
c。建立執行緒實現類物件,
建立執行緒物件,
執行緒物件呼叫方法,開啟執行緒。
補充: (1.) thread 實現 runnable介面
(2.)thread th
thread2 th2
都實現runnable介面 ,在th .start();---th2.run()被執行。【**模式】
(3.)繼承方式, vs 實現方式 哪種執行緒類更好?
實現方式 好:
1.可以多實現
2.資料共享。
【例子:3個視窗同時銷售5張火車票】
【繼承方式:】
public class threadpiao extends thread }}
}【測試**】
new threadpiao().start();
new threadpiao().start();
new threadpiao().start();
【實現方式】
public class threadp implements runnable }}
}【測試**】
threadp tp=new threadp();
new thread(tp).start();
new thread(tp).start();
new thread(tp).start();
問題:繼承方式,可不可以只new 1個執行緒物件,然後呼叫3次start()方法?
4.執行緒狀態/生命週期:
a.新生狀態: new 執行緒類();
b.就緒狀態: start(); 【有被執行的資格,但是還沒有被cpu排程;佇列】
c.執行狀態: run();
d.阻塞狀態: sleep(): 禮讓 yi (); 強制 join();
d.死亡狀態:a。正常執行緒結束 b。發生異常,產生異常物件,沒有被截獲。
c。執行緒自身呼叫了stop()。---不被使用
4.1新生狀態:
建立執行緒物件,可以呼叫無參,有參(給執行緒命名)
---可以獲得到的資訊:
1.獲得執行緒物件。名字 thread.currentthread().getname()
2.設定或獲得當前執行緒的優先順序:
th.setpriority(9);
system.out.println("執行緒優先順序最大是:"+thread.max_priority);
system.out.println("執行緒優先順序最大是:"+thread.min_priority);
system.out.println("th1的執行緒優先順序是:"+th.getpriority());
4.2就緒狀態:
是否處於就緒狀態:thread.currentthread().isalive()
4.3執行狀態:
程式執行run();【有被執行的資格,同時也被cpu排程。但是至於什麼時間被執行的,不清楚】
4.4阻塞狀態:
【執行緒強制執行:join()】
for (int i = 1; i <=10; i++) catch (interruptedexception e)
}system.out.println(thread.currentthread().getname()+"--"+i);
}說明:普通執行緒強制搶占了cpu資源。
主線程:由原來的執行狀態----》阻塞狀態---就緒狀態---執行狀態
普通執行緒:直接執行結束。
使用場合:執行緒有明確的【完成先後順序】。
【執行緒休眠:sleep()】
for (int i = 1; i <=10; i++)
system.out.println(thread.currentthread().getname()+"--"+i);
}說明:(1)當前執行緒休眠:由原來的執行狀態----》阻塞狀態---就緒狀態---執行狀態
---休眠時間結束,進入到就緒狀態,等待cpu排程。
(2)中途阻止休眠:(了解)
【例子:】
終止休眠: 1. th.interrupt();
2. 在異常捕獲的時候,出現return。
【執行緒禮讓:】
for (int i = 0; i < 10; i++)
system.out.println(i);
}說明:讓出當前這次cpu資源:執行緒狀態不阻塞---直接進行就緒狀態--執行狀態。
5.執行緒安全:
多執行緒同時運算元據資源,會出現資料不正確。所需執行緒同步。
public void run() catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"--"+piao--);}}
}}第二種方式:同步方法:
public void run()
}public synchronized void maip() catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"--"+piao--);}}
多執行緒筆記
1 stdin fileno 在unix一些系統呼叫中使用到stdin fileno表示標準輸入,stdout fileno表示標準輸出,stderr fileno表示標準出錯,使用時需要加標頭檔案 在unix下還有stdin,stdout,stderr表示同樣的含義。stdin fileno與st...
多執行緒筆記
一.程序 就是cpu所要執行的乙個任務 自己理解的 執行緒 執行緒是乙個併發執行的順序流,乙個程序包括多個順序執行流程,這執行流程稱為執行緒 就是任務中許多的 二.執行緒排程分配cpu的時間片段給不同的執行緒,得到時間片段的執行緒被cpu執行,其他執行緒等待,執行緒排程會盡可能的分配時間片段取執行。...
多執行緒筆記
1.執行緒的建立方法 繼承thread類 實現runnable介面 重寫run方法 實現callable介面 重寫call方法 2.靜態 簡單來說,靜態 就是 物件和目標物件實現同樣的介面,物件會將目標物件傳遞進來,用目標物件來呼叫方法並新增自己的操作。new thread system.out.p...