多线程——引用同步函数解决经典储户银行存钱问题

package com.work.wor01;
/**
 * 引入同步函数的概念:
 * 
 * 需求:有两个储户同时到一个银行去存钱,每人存3次,每次存100元。
 * 要求打印出银行每次金额的变化情况(假设在储户存钱之前,银行金额为0)
 * 
 * 分析:得出有两个类:银行和储户
 * 这是一个多线程的问题,如何分析他的线程安全问题呢?
 * 1.通过线程的任务代码分析。
 * 2.有没有共享数据,有没有多条语句在操作共享数据。
 * */
class Bank{
	private int sum = 0;
	public void add(int num){
		try {
			Thread.sleep(10);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		sum = sum + num;	
		System.out.println(Thread.currentThread().getName()+"...sum="+sum);
	}
}

class Customer implements Runnable{

	Bank b = new Bank();
	Object obj = new Object();
	private int sum = 0;

	/**
	 * 同步代码块和函数的封装内容是一样的,直接用函数就可以了么?
	 * 答:是不行的。
	 * 差别在哪里呢?函数不具备同步性,那让函数具备同步性就可以了。
	 * 
	 * 怎么让函数具备同步性呢?
	 * 直接让同步关键字作为修饰符,修饰函数即可,此时函数就具备了同步性。
	 * 
	 * 用同步关键字修饰的函数就是同步函数,它是同步的另一种体现形式。
	 * 这种形式的特点是写法简单。
	 * */
	@Override
	public synchronized void run() {
			for(int i = 0;i<3;i++){
				b.add(100);
			}
	}
}

public class BankThread {
	public static void main(String[] args) {
		Customer c = new Customer();
		
		Thread t1 = new Thread(c);
		Thread t2 = new Thread(c);
		
		t1.start();
		t2.start();
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值