Java多线程——同步

public class Mymain
{


    public static void main(String[] args)
    {
        Account acct = new Account(String.valueOf(123), 1000);
        new DrawThread("甲", acct, 800).start();
        new DrawThread("乙", acct, 800).start();


    }


}




package ex07;


import java.util.concurrent.locks.ReentrantLock;


public class Account
{


    private String accountNo;
    private double balance;


    private final ReentrantLock lock = new ReentrantLock();


    public Account(String accountNo, double balance)
    {
        this.accountNo = accountNo;
        this.balance = balance;
    }


    public void draw(double drawAmount)
    {
        lock.lock();
        try
        {
            if (balance >= drawAmount)
            {
                try
                {
                    Thread.sleep(1);
                } catch (InterruptedException ex)
                {
                    ex.printStackTrace();
                }
                balance -= drawAmount;
                System.out.println("余额为啊:" + balance);
            } else
            {
                System.out.println("余额不足啊。");
            }
        } finally
        {
            lock.unlock();
        }
    }


    public String getAccountNo()
    {
        return accountNo;
    }


    public void setAccountNo(String accountNo)
    {
        this.accountNo = accountNo;
    }


    public double getBalance()
    {
        return balance;
    }


    public void setBalance(double balance)
    {
        this.balance = balance;
    }


    public int hashCode()
    {
        return accountNo.hashCode();
    }


    public boolean equals(Object obj)
    {
        if (obj != null && obj.getClass() == Account.class)
        {
            Account target = (Account) obj;
            return target.getAccountNo().equals(accountNo);
        }
        return false;
    }


}



package ex07;


public class DrawThread extends Thread
{
    private Account account;
    private double drawAmount;


    public DrawThread(String name, Account account, double drawAmount)
    {
        super(name);
        this.account = account;
        this.drawAmount = drawAmount;
    }


    public void run()
    {
        account.draw(drawAmount);


        /*synchronized (account)
        {


            if (account.getBalance() >= drawAmount)
            {
                try
                {
                    Thread.sleep(1);


                } catch (InterruptedException ex)
                {
                    ex.printStackTrace();
                }
                account.setBalance(account.getBalance() - drawAmount);
                System.out.println("取钱成功。余额:" + account.getBalance());
            } else
            {
                System.out.println("余额不足。");
            }
        }*/


    }
}

猜你喜欢

转载自blog.csdn.net/terry8000/article/details/80856112