您的位置:首页 > 其它

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

2016-08-20 09:45 946 查看
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多线程
相关文章推荐