多執行緒-同步程式碼塊解決執行緒安全問題的解釋以及同步的特點及好處和弊端
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 多執行緒】多執行緒併發同步問題及解決方法Java執行緒
- 多執行緒併發同步問題及解決方案執行緒
- 多執行緒下的程式同步(執行緒同步問題總結篇)執行緒
- 多執行緒的安全問題及解決方案執行緒
- 多執行緒非同步安全,安全鎖的問題執行緒非同步
- JAVA多執行緒詳解(3)執行緒同步和鎖Java執行緒
- 【Java】【多執行緒】同步方法和同步程式碼塊、死鎖Java執行緒
- java 執行緒安全問題,解決執行緒安全問題——同步程式碼塊,同步方法,Lock鎖,Object類中wait方法,notify方法。等待喚醒案例。Java執行緒ObjectAI
- 多執行緒-同步程式碼快的鎖及同步方法應用和鎖的問題執行緒
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- 多執行緒問題解釋執行緒
- 執行緒同步及執行緒鎖執行緒
- Java之執行緒安全問題的3種處理方式(通過執行緒同步)Java執行緒
- 多執行緒同步執行緒
- 多執行緒-生產者消費者問題程式碼2並解決執行緒安全問題執行緒
- 同步的特點,好處,弊端
- java 執行緒淺解03[執行緒同步以及經典死鎖]Java執行緒
- 多執行緒的同步和非同步學習執行緒非同步
- 多執行緒同步的原理執行緒
- Java中多執行緒的概述、實現方式、執行緒控制、生命週期、多執行緒程式練習、安全問題的解決...Java執行緒
- 多執行緒程式設計,處理多執行緒的併發問題(執行緒池)執行緒程式設計
- iOS多執行緒全套:執行緒生命週期,多執行緒的四種解決方案,執行緒安全問題,GCD的使用,NSOperation的使用iOS執行緒GC
- Q:你瞭解非同步程式設計、程式、單執行緒、多執行緒嗎?非同步程式設計執行緒
- 那些年搞不懂的多執行緒、同步非同步及阻塞和非阻塞(一)---多執行緒簡介執行緒非同步
- Python執行緒安全問題及解決方法Python執行緒
- java 多執行緒 –同步Java執行緒
- java 多執行緒 --同步Java執行緒
- iOS多執行緒程式設計:執行緒同步總結iOS執行緒程式設計
- .NET多執行緒程式設計(3):執行緒同步 (轉)執行緒程式設計
- 執行緒以及多執行緒,多程式的選擇執行緒
- 執行緒的同步執行緒
- jQuery同步Ajax帶來的UI執行緒阻塞問題及解決辦法jQueryUI執行緒
- java多執行緒:執行緒同步synchronized(不同步的問題、佇列與鎖),死鎖的產生和解決Java執行緒synchronized佇列
- 4、Linux多執行緒,執行緒同步(2)Linux執行緒
- 多執行緒(2)-執行緒同步互斥鎖Mutex執行緒Mutex
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒
- 多執行緒同步的開發執行緒