Java.假设某家银行可接受顾客的取款和存款,每次进行一次取款或存款,便可计算出账户的总额。现有一个账户余额2000元,两名顾客每人分4次,每次取款100元。另有两名顾客每人分3次,每次存入100元

代码,BankAccount类部分:

package dodo;

public class BankAccount implements Runnable
{
	    private int balance=2000; // 账户余额

	    public BankAccount() 
	    {
	        this.balance = balance;
	    }

	    // 存款方法,对方法进行同步
	    public synchronized void deposit(int amount) 
	    {
	        balance += amount;
	        System.out.println(Thread.currentThread().getName() + " 存入 " + amount + " 元,余额为:" + balance);
	    }

	    // 取款方法,对方法进行同步
	    public synchronized void withdraw(int amount) 
	    {
	        if (balance >= amount) 
	        {
	            balance -= amount;
	            System.out.println(Thread.currentThread().getName() + " 取出 " + amount + " 元,余额为:" + balance);
	        } 
	        else 
	        {
	            System.out.println(Thread.currentThread().getName() + " 余额不足,无法取款,余额为:" + balance);
	        }
	    }

	    // 存款客户线程的运行体
	    public void depositTask() 
	    {
	        for (int i = 0; i < 3; i++) 
	        {
	            deposit(100);
	            try 
	            {
	                Thread.sleep(1000); // 暂停1秒钟
	            }
	            catch (InterruptedException e) 
	            {
	                e.printStackTrace();
	            }
	        }
	    }

	    // 取款客户线程的运行体
	    public void withdrawTask() 
	    {
	        for (int i = 0; i < 4; i++) 
	        {
	            withdraw(100);
	            try 
	            {
	                Thread.sleep(1000); // 暂停1秒钟
	            } 
	            catch (InterruptedException e) 
	            {
	                e.printStackTrace();
	            }
	        }
	    }
	    public void run()
	    {
	        // 获取当前线程对象
	    	//Thread.currentThread()是Thread类中的一个静态方法,它返回当前正在执行的线程对象
	        Thread currentThread = Thread.currentThread();
	        // 获取当前线程的名称
	        String threadName = currentThread.getName();
	        // 判断当前线程是存款客户1还是存款客户2
	        if (threadName.equals("存款客户1") || threadName.equals("存款客户2")) 
	        {
	            // 如果是存款客户1或存款客户2,执行存款操作
	            depositTask();
	        }
	        else if (threadName.equals("取款客户1") || threadName.equals("取款客户2")) 
	        {
	            // 如果是取款客户1或取款客户2,执行取款操作
	            withdrawTask();
	        }
	    }
}

代码,main函数部分:

package dodo;

public class Dodo 
{
    public static void main(String[] args) 
    {
        // 创建银行账户
        BankAccount account = new BankAccount();

        // 创建存款客户线程和取款客户线程,并启动线程
        
        Thread th1 = new Thread(account, "存款客户1");
        Thread th2 = new Thread(account, "取款客户1");
        Thread th3 = new Thread(account, "存款客户2");
        Thread th4 = new Thread(account, "取款客户2");
        th1.start();
        th2.start();
        th3.start();
        th4.start();
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值