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