一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Java學(xué)習(xí)——114.交互線程

 pythonjava學(xué)習(xí) 2021-04-06

線程在執(zhí)行的過程中,有可能會需要共享資源或者交換數(shù)據(jù),則稱這一組線程為交互線程。

線程間的交互存在兩種關(guān)系:競爭和協(xié)作。

競爭關(guān)系是指,兩個線程同時使用同一個資源時,會產(chǎn)生競爭。此時,由于線程的并發(fā)執(zhí)行,可能會產(chǎn)生與時間有關(guān)的錯誤。

如以下例題:

本例題是模擬銀行的賬戶,存款和取款均為線程,對不同賬戶的操作不會產(chǎn)生問題,但如果是對同一個賬戶同時存款和取款時,可能會發(fā)生錯誤,其代碼如下:

public class Account {//賬戶類

    String name;

    double money;

    public Account() {

       name=null;

       money=0;

    }

    public Account(String name,double money) {

       this.set(name,money);

    }

    public void set(String name,double money) {

       this.name=name;

       this.money=money;

    }

    public String get_name() {

       return name;

    }

    public double get_money() {

       return money;

    }

    public void quqian(double money) {//取錢

       if(money<0)

           ;

       if(this.money>money)

           this.money=this.money-money;

       else

           System.out.println("您的賬戶余額不足");

    }

    public void cunqian(double money) {//存錢

       if(money>0)

           this.money+=money;

    }

    public String toString() {

       return"賬戶名:"+this.name+",賬戶中有:"+this.money;

    }

}

 class exa{

    public static void main(String args[]) {

       Account count=new Account("張三",300);

       System.out.println(count);

       SaveMoney save=new SaveMoney(count,100);

       SaveMoney save1=new SaveMoney(count,100);

       save.start();

       save1.start();

       getMoney get=new getMoney(count,100);

       get.start();

    }

}

public class SaveMoney extends Thread{//存錢類,繼承自線程類

    private Account account;

    private doublevalue;

    public SaveMoney(Account a,double v) {

       this.account=a;

       this.value=v;

    }

    public void run() {

           this.account.cunqian(value);

           System.out.println("存入"+value+"后,您的賬戶余額為:"+this.account.money);

    }

}

public class getMoney extends Thread{//取錢類,繼承自線程類

    private Account account;

    private doublevalue;

    public getMoney(Account a,double v) {

       this.account=a;

       this.value=v;

    }

    public void run() {

           this.account.quqian(value);

           System.out.println("取出"+value+"后,您的賬戶余額為:"+this.account.money);

    }

}

其運行結(jié)果如下:

從這個結(jié)果會發(fā)現(xiàn),“張三”這個賬戶中原有300元,在存入100元之后卻變成了500元,這個結(jié)果明顯不是我們想要的結(jié)果,產(chǎn)生這個錯誤的原因就在于,存錢線程有兩個,取錢線程有一個,都是對賬戶“張三”在進(jìn)行操作,由于線程的并發(fā)執(zhí)行,在兩個存錢線程有可能是同時執(zhí)行的,所以它的結(jié)果會變?yōu)?00,但這個結(jié)果是錯誤的。

要解決這個錯誤,需要互斥。

下一篇會介紹線程的互斥。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    在线播放欧美精品一区| 亚洲欧美一二区日韩高清在线| 91欧美视频在线观看免费| 少妇福利视频一区二区| 欧洲一级片一区二区三区| 亚洲精品欧美精品一区三区| 国产一区二区三区成人精品| 国产精品免费不卡视频| 国产又大又硬又粗又湿| 亚洲国产一区精品一区二区三区色 | 青青操日老女人的穴穴| 九九热最新视频免费观看| 欧美大胆女人的大胆人体| 国产精品免费福利在线| 亚洲第一视频少妇人妻系列| 国语对白刺激高潮在线视频| 欧美精品亚洲精品一区| 免费观看成人免费视频| 日韩免费成人福利在线| 五月的丁香婷婷综合网| 亚洲国产一级片在线观看| 大香蕉伊人精品在线观看| 99福利一区二区视频| 隔壁的日本人妻中文字幕版| 色婷婷日本视频在线观看| 欧美一区二区三区不卡高清视| 五月婷婷欧美中文字幕| 日韩精品免费一区二区三区| 五月婷婷综合激情啪啪| 好吊视频一区二区在线| 黄色片一区二区三区高清| 中日韩美一级特黄大片| 日韩欧美三级中文字幕| 狠狠做五月深爱婷婷综合| 日本理论片午夜在线观看| 中文字幕av诱惑一区二区| 日韩夫妻午夜性生活视频| 国产精品流白浆无遮挡| 欧美日韩乱码一区二区三区| 欧美一区二区三区不卡高清视| 麻豆视传媒短视频在线看|