摘要:賣票案例出現了線程安全問題賣出了不存在的票和重復的票解決線程安全問題的一種方案使用同步代碼塊格式鎖對象可能會出現線程安全問題的代碼訪問了共享數據的代碼注意通過代碼塊中的鎖對象可以使用任意的對象但是必須保證多個線程使用的鎖對象是同一個鎖對象作
package com.itheima.demo07.Synchronized;
/*
賣票案例出現了線程安全問題 賣出了不存在的票和重復的票 解決線程安全問題的一種方案:使用同步代碼塊 格式: synchronized(鎖對象){ 可能會出現線程安全問題的代碼(訪問了共享數據的代碼) } 注意: 1.通過代碼塊中的鎖對象,可以使用任意的對象 2.但是必須保證多個線程使用的鎖對象是同一個 3.鎖對象作用: 把同步代碼塊鎖住,只讓一個線程在同步代碼塊中執行
*/
public class RunnableImpl implements Runnable{
//定義一個多個線程共享的票源 private int ticket = 100; //創建一個鎖對象 Object obj = new Object(); //設置線程任務:賣票 @Override public void run() { //使用死循環,讓賣票操作重復執行 while(true){ //同步代碼塊 synchronized (obj){ //先判斷票是否存在 if(ticket>0){ //提高安全問題出現的概率,讓程序睡眠 try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } //票存在,賣票 ticket-- System.out.println(Thread.currentThread().getName()+"-->正在賣第"+ticket+"張票"); ticket--; } } } }
}
package com.itheima.demo07.Synchronized;
/*
模擬賣票案例 創建3個線程,同時開啟,對共享的票進行出售
*/
public class Demo01Ticket {
public static void main(String[] args) { //創建Runnable接口的實現類對象 RunnableImpl run = new RunnableImpl(); //創建Thread類對象,構造方法中傳遞Runnable接口的實現類對象 Thread t0 = new Thread(run); Thread t1 = new Thread(run); Thread t2 = new Thread(run); //調用start方法開啟多線程 t0.start(); t1.start(); t2.start(); }
}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75606.html
摘要:線程安全問題都是由全局變量及靜態變量引起的。常量始終是線程安全的,因為只存在讀操作。局部變量是線程安全的。有狀態對象,就是有實例變量的對象,可以保存數據,是非線程安全的。 前言 有多少人在使用Spring框架時,很多時候不知道或者忽視了多線程的問題? ??因為寫程序時,或做單元測試時,很難有機會碰到多線程的問題,因為沒有那么容易模擬多線程測試的環境。那么當多個線程調用同一個bean的時...
摘要:線程安全問題都是由全局變量及靜態變量引起的。常量始終是線程安全的,因為只存在讀操作。局部變量是線程安全的。有狀態對象,就是有實例變量的對象,可以保存數據,是非線程安全的。 前言 有多少人在使用Spring框架時,很多時候不知道或者忽視了多線程的問題? ??因為寫程序時,或做單元測試時,很難有機會碰到多線程的問題,因為沒有那么容易模擬多線程測試的環境。那么當多個線程調用同一個bean的時...
摘要:線程操作共享數據的安全問題線程操作共享數據的安全問題如果有多個線程在同時運行,而這些線程可能會同時運行這段代碼。喚醒全部可以將線程池中的所有線程都喚醒。 01線程操作共享數據的安全問題 *A:線程操作共享數據的安全問題 如果有多個線程在同時運行,而這些線程可能會同時運行這段代碼。 程序每次運行結果和單線程運行的結果是一樣的,而且其他的變量的值也和預期的是一樣的,就是線程安全的。 02...
閱讀 2562·2021-09-02 15:40
閱讀 1566·2019-08-30 15:54
閱讀 1080·2019-08-30 12:48
閱讀 3398·2019-08-29 17:23
閱讀 1046·2019-08-28 18:04
閱讀 3664·2019-08-26 13:54
閱讀 606·2019-08-26 11:40
閱讀 2391·2019-08-26 10:15