欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java多線程三種上鎖方式小結(jié)

 更新時間:2023年12月22日 11:06:16   作者:湖邊看客  
本文主要介紹了java多線程三種上鎖方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

以下以兩人共用一個銀行卡賬戶的方式,同時取錢,兩條線程同時執(zhí)行,為了保證線程安全,我們對關(guān)鍵的部分進(jìn)行加鎖的三種方式

線程類

public class DrawThread extends Thread {
    private Account acc;

    public DrawThread(Account acc, String name){
        super(name);
        this.acc=acc;
    }

    @Override
    public  void run(){
        //取錢  //每個線程在start的時候   都會執(zhí)行  這個run方法
        acc.drawMoney(10000);
    }
}

賬戶類

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Account {
    private  String cardId;
    private  double money;
    //創(chuàng)建一個鎖對象
    private final Lock lk =new ReentrantLock(); //手動鎖


    public Account() {
    }

    public Account(String cardId, double money) {
        this.cardId = cardId;
        this.money = money;
    }


    //靜態(tài)代碼   用class作為鎖
    public static  void test(){
        synchronized (Account.class){

        }
    }

    //取錢的方法
    //同步代碼塊上鎖
     /**   public void drawMoney(double money){
            //誰來取錢?
            String name = Thread.currentThread().getName();
            //判斷余額是否足夠
            synchronized (this){  //this 在這個過程中是共同擁有的相同的數(shù)據(jù) 所以能鎖住
                if(this.money>=money){
                    System.out.println(name+"取錢"+money+"成功!");
                    this.money -= money;
                    System.out.println(name+"取錢后,剩余"+this.money);
                }else {
                    System.out.println(name+"余額不足");
                }
            }
        }
    */

    //取錢方法
    //同步方法上鎖
    /** public synchronized void drawMoney(double money){
         //誰來取錢?
         String name = Thread.currentThread().getName();
         //判斷余額是否足夠
             if(this.money>=money){
                 System.out.println(name+"取錢"+money+"成功!");
                 this.money -= money;
                 System.out.println(name+"取錢后,剩余"+this.money);
             }else {
                 System.out.println(name+"余額不足");
             }

     }
    */

    //取錢的方法
    //手動鎖
    public synchronized void drawMoney(double money){
        //誰來取錢?
        String name = Thread.currentThread().getName();
        lk.lock(); //加鎖
        //判斷余額是否足夠
        if(this.money>=money){
            System.out.println(name+"取錢"+money+"成功!");
            this.money -= money;
            System.out.println(name+"取錢后,剩余"+this.money);
        }else {
            System.out.println(name+"余額不足");
        }
        lk.unlock(); //解鎖
    }




    public String getCardId() {
        return cardId;
    }

    public void setCardId(String cardId) {
        this.cardId = cardId;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

}

執(zhí)行

public class ThreadTest {

    public static void main(String[] args) {
        //創(chuàng)建一個賬戶
        Account acc = new Account("ic000",10000);
        //創(chuàng)建兩個線程分別代表小明和小紅  同時  在這個個賬戶中取錢


        new DrawThread(acc,"小明").start();

        new DrawThread(acc,"小紅").start();


        Account acc2 = new Account("ic002",10000);
        //創(chuàng)建兩個線程分別代表小明和小紅  同時  在這個個賬戶中取錢

        new DrawThread(acc2,"小黑").start();

        new DrawThread(acc2,"小白").start();

    }

}

效果: 

到此這篇關(guān)于java多線程三種上鎖方式小結(jié)的文章就介紹到這了,更多相關(guān)java多線程上鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • jmeter壓力測試工具簡介_動力節(jié)點(diǎn)Java學(xué)院整理

    jmeter壓力測試工具簡介_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了jmeter壓力測試工具相關(guān)介紹資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • ajax實時監(jiān)測與springboot的實例分析

    ajax實時監(jiān)測與springboot的實例分析

    本文將介紹如何使用 AJAX 技術(shù)結(jié)合 Spring Boot 構(gòu)建一個實時反饋用戶輸入的應(yīng)用,我們將創(chuàng)建一個簡單的輸入框,當(dāng)用戶在輸入框中鍵入文本時,應(yīng)用將異步地向后端發(fā)送請求,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Java設(shè)計模式之靜態(tài)工廠模式詳解

    Java設(shè)計模式之靜態(tài)工廠模式詳解

    這篇文章主要介紹了Java設(shè)計模式之靜態(tài)工廠模式,簡單說明了靜態(tài)工廠模式的概念、原理、實現(xiàn)與使用方法,需要的朋友可以參考下
    2017-09-09
  • SpringCloud實現(xiàn)Redis在各個微服務(wù)的Session共享問題

    SpringCloud實現(xiàn)Redis在各個微服務(wù)的Session共享問題

    Redis是運(yùn)行在內(nèi)存中,查取速度很快。本文重點(diǎn)給大家介紹SpringCloud實現(xiàn)Redis在各個微服務(wù)的Session共享,感興趣的朋友一起看看吧
    2018-08-08
  • SpringBoot實現(xiàn)圖形驗證碼的操作方法

    SpringBoot實現(xiàn)圖形驗證碼的操作方法

    隨著安全性的要求越來越高,目前許多項目中都使用了驗證碼,驗證碼也有各種類型,如 圖形驗證碼、短信驗證碼、郵件驗證碼、人臉識別等,本文給大家介紹SpringBoot實現(xiàn)圖形驗證碼的方法,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 基于java實現(xiàn)停車場管理系統(tǒng)

    基于java實現(xiàn)停車場管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于java實現(xiàn)停車場管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Java實現(xiàn)游戲飛機(jī)大戰(zhàn)-III的示例代碼

    Java實現(xiàn)游戲飛機(jī)大戰(zhàn)-III的示例代碼

    這篇文章主要為大家介紹了如何利用Java實現(xiàn)經(jīng)典的游戲之飛機(jī)大戰(zhàn),文中采用了swing技術(shù)進(jìn)行了界面化處理,感興趣的小伙伴可以動手試一試
    2022-02-02
  • springboot項目整合druid數(shù)據(jù)庫連接池的實現(xiàn)

    springboot項目整合druid數(shù)據(jù)庫連接池的實現(xiàn)

    這篇文章主要介紹了springboot項目整合druid數(shù)據(jù)庫連接池的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java實現(xiàn)快速并查集

    Java實現(xiàn)快速并查集

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)快速并查集,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Java 8 引入lambda表達(dá)式的原因解析

    Java 8 引入lambda表達(dá)式的原因解析

    這篇文章主要介紹了Java 8 引入lambda表達(dá)式的原因解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08

最新評論