<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    線程3--線程的互斥

    Posted on 2009-06-02 20:14 啥都寫點 閱讀(178) 評論(0)  編輯  收藏 所屬分類: J2SE
    關鍵技術:
    • 在類的方法聲明中使用synchronized關鍵字可以保證在同一時刻只有一個線程能夠進入該方法。
    • synchronized可以出現在代碼塊中,表示同一時刻只有一個線程能夠進入該段代碼。

    package book.thread;

    /**
     * 線程的互斥,主要展示同步方法與非同步方法的區別
     
    */
    public class Synchronized {
        
    /**
         * 帳號類
         
    */
        
    static class Account{
            
    //共享資源, 錢數
            private double money = 1000.0d;
            
    /**
             * 存錢    沒有同步機制
             * 
    @param fFees
             
    */
            
    public void nonSynDeposit(double fFees){
                System.out.println(
    "Account nonSynDeposit begin! money = " + this.money + "; fFees = " + fFees);
                
    //存錢錢先等待300毫秒
                System.out.println("Account nonSynDeposit sleep begin!");
                
    try {
                    Thread.sleep(
    300);
                } 
    catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(
    "Account nonSynDeposit sleep end!");
                
    this.money = this.money + fFees;
                System.out.println(
    "Account nonSynDeposit end! money = " + this.money);
            }
            
    /**
             * 取錢    沒有同步機制
             * 
    @param fFees
             
    */
            
    public void nonSynWithdraw(double fFees){
                System.out.println(
    "Account nonSynWithdraw begin! money = " + this.money + "; fFees = " + fFees);
                
    //取錢時先等待400毫秒
                System.out.println("Account nonSynWithdraw sleep begin!");
                
    try {
                    Thread.sleep(
    400);
                } 
    catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(
    "Account nonSynWithdraw sleep begin!");
                
    this.money = this.money - fFees;
                System.out.println(
    "Account nonSynWithdraw end! money = " + this.money);
            }
            
    /**
             * 存錢    有同步機制
             * 
    @param fFees
             
    */
            
    public synchronized void synDeposit(double fFees){
                System.out.println(
    "Account synDeposit begin! money = " + this.money + "; fFees = " + fFees);
                
    //存錢錢先等待300毫秒
                System.out.println("Account synDeposit sleep begin!");
                
    try {
                    Thread.sleep(
    300);
                } 
    catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(
    "Account synDeposit sleep begin!");
                
    this.money = this.money + fFees;
                System.out.println(
    "Account synDeposit end! money = " + this.money);
            }
            
    /**
             * 取錢    有同步機制
             * 
    @param fFees
             
    */
            
    public synchronized void synWithdraw(double fFees){
                System.out.println(
    "Account synWithdraw begin! money = " + this.money + "; fFees = " + fFees);
                
    //取錢時先等待400毫秒
                System.out.println("Account synWithdraw sleep begin!");
                
    try {
                    Thread.sleep(
    400);
                } 
    catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(
    "Account synWithdraw sleep end!");
                
    this.money = this.money - fFees;
                System.out.println(
    "Account synWithdraw end! money = " + this.money);
            }
        }
        
        
    static class AccessThread extends Thread{
            
    //待訪問的帳號對象
            private Account account = null;
            
    //訪問帳號的方法
            private String method = "";

            
    public AccessThread(Account account, String method){
                
    this.method = method;
                
    this.account = account;
            }
            
    public void run(){
                
    //對不同的方法名參數調用不同的方法
                if (method.equals("nonSynDeposit")){
                    account.nonSynDeposit(
    500.0);
                } 
    else if (method.equals("nonSynWithdraw")){
                    account.nonSynWithdraw(
    200.0);
                } 
    else if (method.equals("synDeposit")){
                    account.synDeposit(
    500.0);
                } 
    else if (method.equals("synWithdraw")){
                    account.synWithdraw(
    200.0);
                }
            }
        }

        
    public static void main(String[] args) {
            
    //待操作的帳號對象,所有操作都針對該帳號
            Account account = new Account();
            
            System.out.println(
    "使用非同步方法時:");
            
    //非同步方法存錢的線程
            Thread threadA = new AccessThread(account, "nonSynDeposit");
            
    //非同步方法取錢的線程
            Thread threadB = new AccessThread(account, "nonSynWithdraw");
            threadA.start();
            threadB.start();
            
    //等待兩線程運行結束
            try {
                threadA.join();
                threadB.join();
            } 
    catch (InterruptedException e) {
                e.printStackTrace();
            }
            
    //下面測試同步方法
            System.out.println();
            account 
    = new Account();
            System.out.println(
    "使用同步方法時:");
            threadA 
    = new AccessThread(account, "synDeposit");
            threadB 
    = new AccessThread(account, "synWithdraw");
            threadA.start();
            threadB.start();
        }
    }



                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 亚洲精品无码专区久久久| 免费h成人黄漫画嘿咻破解版| 国产亚洲欧洲Aⅴ综合一区| 国产亚洲福利一区二区免费看 | 亚洲一区二区三区免费观看| 亚洲av一综合av一区| 免费一级毛片在线播放视频| 亚洲av色影在线| 无码人妻精品中文字幕免费| 亚洲欧洲日本精品| 歪歪漫画在线观看官网免费阅读| 亚洲av无码一区二区三区天堂古代| 91麻豆最新在线人成免费观看| 亚洲第一永久在线观看| 无码一区二区三区AV免费| 亚洲欧美成人综合久久久| 国产一级高清视频免费看| 中美日韩在线网免费毛片视频| 亚洲人JIZZ日本人| 69xx免费观看视频| WWW国产亚洲精品久久麻豆| 亚洲中文字幕无码爆乳av中文| 久久青青草原国产精品免费| 亚洲成人免费在线观看| 国产色婷婷精品免费视频| 女人隐私秘视频黄www免费| 77777_亚洲午夜久久多人| 国产精品久久久久久久久久免费 | 亚洲码一区二区三区| 四虎成人免费影院网址| 男女一边摸一边做爽的免费视频| 亚洲网址在线观看你懂的| 日韩毛片免费无码无毒视频观看| 黄色大片免费网站| 久久精品国产亚洲AV嫖农村妇女| 亚洲人成电影网站免费| 在线观看黄片免费入口不卡| 亚洲av专区无码观看精品天堂| 亚洲精品A在线观看| 777成影片免费观看| 一级毛片正片免费视频手机看|