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();
}
}
多线程——引用同步函数解决经典储户银行存钱问题
最新推荐文章于 2022-04-08 15:11:26 发布