Java學習筆記之執行緒
所謂執行緒就是程式的執行路徑,執行單元,為程式就是正在執行的應用程式,顧名思義,多程式就是一個程式的多個執行單元,執行路徑。
多執行緒的兩種方案
繼承Thread類(檢視api簡單介紹Thread類):
實現Runable介面:
多執行緒的幾個問題:
A:啟動執行緒用的是哪個方法
start()
B:start()和run()的區別
start():1.開啟執行緒 2.執行run()方法裡面的程式碼
run():執行的是執行緒裡面執行的程式碼,並不會開啟執行緒
C:為什麼要重寫run()
因為每個執行緒需要執行的程式碼都是都是不一樣的,
我們需要將每個執行緒自己獨立執行的程式碼寫到run()方法中執行
D:執行緒可以多次啟動嗎
不可以,一個程式只能啟動一次,隨後與其他程式一起搶佔CPU的資源
執行緒的排程和控制
執行緒休眠(Thread.sleep(毫秒值))
執行緒名稱(setName(),getName();)
執行緒的排程及優先順序setPriority(10)(注意預設值是5,區間在1-10之間)
執行緒優先順序:說白了就是設定你搶佔cpu執行權搶佔到的概率,規定了執行緒執行的順序
多執行緒案例(兩種方式實現,睡一會出現執行緒安全問題):
A.繼承Thread賣票
B.實現Runnable賣票(睡一會出現執行緒安全問題)
問題:
按照真實的情景加入了延遲,確發現出現了這樣的兩個問題:
A:相同的票賣了多次
CPU的一次操作必須是原子性的(操作是CPU執行一次就可以直接完成的)
B:出現了負數的票
隨機性和延遲導致的
出現上面的問題稱為執行緒安全問題。
public class MyThread implements Runnable{
int ticket = 100;
Object obj = new Object();
public void run(){
while(true){
// synchronized (obj) {
if(ticket>0){
try{
Thread.sleep(100);
}catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()
+ "正在出售第" + ticket-- + "張票");
}
// }
}
}
}
判斷執行緒安全問題:
A:是否是多執行緒環境
B:是否有共享資料
C:是否有多條語句操作共享資料
為了解決執行緒安全問題引入了同步程式碼塊(執行緒安全執行效率就低)
synchronized(物件) {
需要被同步的程式碼。
}
物件被稱為執行緒的鎖,對於多執行緒,所必須保證是同一把鎖;與同步程式碼塊相一致的解決方法
有同步方法,和靜態同步方法,他們的鎖分別為此類的物件this和本類的位元組碼檔案物件:類名
class。
JDK5的Lock鎖,我們之前造的所有的鎖都沒有手動釋放鎖
static Lock lock = new ReentrantLock();
枷鎖:lock.lock();
釋放鎖:lock.unlock();
可以讓我們明確的知道在哪裡加鎖和釋放鎖。
依然寫一個賣票的demo,用lock枷鎖釋放鎖,
為了保證我們建立的鎖一定會被釋放,用一下程式碼進行改進
try{....}finally{.....}
死鎖問題
同步巢狀,鎖裡面套了一個鎖,出現同步巢狀
(簡單介紹,要求大家以後寫的時候需要注意)
執行緒等待和喚醒機制(案例演示:waitThread,NotifyThread,MyLock,Test)
鎖物件呼叫wait()鎖物件呼叫notify()
注意:
wait和sleep的區別
執行緒等待,在等待的同時釋放鎖,而sleep()方法在執行的過程中是不會釋放鎖的
相關文章
- JAVA學習筆記之 多執行緒賣票Java筆記執行緒
- Java 多執行緒學習筆記Java執行緒筆記
- java學習筆記--多執行緒Java筆記執行緒
- Java多執行緒學習筆記(自用)Java執行緒筆記
- java學習筆記.04——執行緒池Java筆記執行緒
- Java 多執行緒學習筆記(三)-守護執行緒Java執行緒筆記
- Java多執行緒學習筆記(二) (轉)Java執行緒筆記
- iOS執行緒學習筆記iOS執行緒筆記
- 多執行緒學習筆記執行緒筆記
- Python學習筆記|Python之執行緒Python筆記執行緒
- Java 多執行緒 學習筆記(二)停止執行緒的幾種方法Java執行緒筆記
- Thinking in Java--Java多執行緒學習筆記(1)ThinkingJava執行緒筆記
- 多執行緒學習筆記 (轉)執行緒筆記
- Thinking in Java---多執行緒學習筆記(2)ThinkingJava執行緒筆記
- (三)Java併發學習筆記–執行緒封閉Java筆記執行緒
- Java 多執行緒學習筆記(四)yield 介紹Java執行緒筆記
- Java 多執行緒學習筆記(五)synchronized 鎖重入Java執行緒筆記synchronized
- java執行緒學習5——執行緒同步之同步方法Java執行緒
- java併發筆記之java執行緒模型Java筆記執行緒模型
- Linux程式執行緒學習筆記Linux執行緒筆記
- Python學習筆記 - 多執行緒Python筆記執行緒
- C#多執行緒學習筆記C#執行緒筆記
- Java併發程式設計學習筆記----執行緒池Java程式設計筆記執行緒
- Java多執行緒學習筆記(六) 長樂未央篇Java執行緒筆記
- java 執行緒學習Java執行緒
- java執行緒學習Java執行緒
- Java多執行緒筆記Java執行緒筆記
- C# 多執行緒學習筆記 – 1C#執行緒筆記
- OS學習筆記二: 程式執行緒模型筆記執行緒模型
- Java多執行緒學習——執行緒通訊Java執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒
- Java多執行緒學習Java執行緒
- Java 執行緒池學習Java執行緒
- Java學習之併發多執行緒理解Java執行緒
- Linux程式執行緒學習筆記:程式間通訊 之 管道Linux執行緒筆記
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- #大學#Java多執行緒學習02(執行緒同步)Java執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒