多執行緒-同步程式碼塊解決執行緒安全問題的解釋以及同步的特點及好處和弊端
package cn.itcast_10;
public class SellTicket implements Runnable {
// 定義100張票
private int tickets = 100;
// 定義同一把鎖
private Object obj = new Object();
@Override
public void run() {
while (true) {
// t1,t2,t3都能走到這裡
// 假設t1搶到CPU的執行權,t1就要進來
// 假設t2搶到CPU的執行權,t2就要進來,發現門是關著的,進不去。所以就等著。
// 門(開,關)
synchronized (obj) { // 發現這裡的程式碼將來是會被鎖上的,所以t1進來後,就鎖了。(關)
if (tickets > 0) {
try {
Thread.sleep(100); // t1就睡眠了
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "正在出售第" + (tickets--) + "張票 ");
//視窗1正在出售第100張票
}
} //t1就出來可,然後就開門。(開)
}
}
}
package cn.itcast_10;
/*
* 舉例:
* 火車上廁所。
*
* 同步的特點:
* 前提:
* 多個執行緒
* 解決問題的時候要注意:
* 多個執行緒使用的是同一個鎖物件
* 同步的好處
* 同步的出現解決了多執行緒的安全問題。
* 同步的弊端
* 當執行緒相當多時,因為每個執行緒都會去判斷同步上的鎖,這是很耗費資源的,無形中會降低程式的執行效率。
*/
public class SellTicketDemo {
public static void main(String[] args) {
// 建立資源物件
SellTicket st = new SellTicket();
// 建立三個執行緒物件
Thread t1 = new Thread(st, "視窗1");
Thread t2 = new Thread(st, "視窗2");
Thread t3 = new Thread(st, "視窗3");
// 啟動執行緒
t1.start();
t2.start();
t3.start();
}
}
相關文章
- 多執行緒併發同步問題及解決方案執行緒
- 多執行緒的安全問題及解決方案執行緒
- 多執行緒和多執行緒同步執行緒
- java 執行緒安全問題,解決執行緒安全問題——同步程式碼塊,同步方法,Lock鎖,Object類中wait方法,notify方法。等待喚醒案例。Java執行緒ObjectAI
- JAVA多執行緒詳解(3)執行緒同步和鎖Java執行緒
- 【Java】【多執行緒】同步方法和同步程式碼塊、死鎖Java執行緒
- 多執行緒問題解釋執行緒
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- Java之執行緒安全問題的3種處理方式(通過執行緒同步)Java執行緒
- Python執行緒安全問題及解決方法Python執行緒
- iOS多執行緒全套:執行緒生命週期,多執行緒的四種解決方案,執行緒安全問題,GCD的使用,NSOperation的使用iOS執行緒GC
- java 執行緒淺解03[執行緒同步以及經典死鎖]Java執行緒
- 多執行緒的同步和非同步學習執行緒非同步
- 同步的特點,好處,弊端
- 執行緒以及多執行緒,多程式的選擇執行緒
- java 多執行緒 –同步Java執行緒
- java 多執行緒 --同步Java執行緒
- 執行緒的同步執行緒
- java多執行緒程式設計問題以及解決辦法Java執行緒程式設計
- java多執行緒:執行緒同步synchronized(不同步的問題、佇列與鎖),死鎖的產生和解決Java執行緒synchronized佇列
- Java中的執行緒同步詳解Java執行緒
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒
- 多執行緒(2)-執行緒同步互斥鎖Mutex執行緒Mutex
- java學習回顧---執行緒和同步程式碼塊Java執行緒
- 非同步/同步,阻塞/非阻塞,單執行緒/多執行緒概念梳理非同步執行緒
- Java中解決多執行緒資料安全問題Java執行緒
- 執行緒的【生命週期】和【執行緒的同步】(多視窗售票例子)執行緒
- 多執行緒併發執行及解決方法執行緒
- 多執行緒併發安全問題詳解執行緒
- 多執行緒(2)-執行緒同步條件變數執行緒變數
- Java多執行緒之執行緒同步【synchronized、Lock、volatitle】Java執行緒synchronized
- C#多執行緒開發-執行緒同步 02C#執行緒
- Java24解決了虛擬執行緒同步使用問題Java執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- 非同步VS多執行緒非同步執行緒
- iOS 多執行緒--GCD 序列佇列、併發佇列以及同步執行、非同步執行iOS執行緒GC佇列非同步
- 執行緒和程式基礎以及多執行緒的基本使用(iOS)執行緒iOS
- C#多執行緒程式設計-基元執行緒同步構造C#執行緒程式設計
- Java多執行緒中執行緒安全與鎖問題Java執行緒