java多线程经典问题二--银行存钱问题

版权声明:欢迎转载,注明出处 https://blog.csdn.net/jklcl/article/details/81710056

实例:两个人向同一个账户里面存钱

public class Demo {
    public static void main(String[] args) {
        //1.创建任务类对象
        CunQian cunQian = new CunQian();

        //2.创建线程
        Thread thread1 = new Thread(cunQian);
        Thread thread2 = new Thread(cunQian);

        //3.开启线程
        thread1.start();
        thread2.start();
    }
}

class Bank {
    static int sum;

    public void addMoney(int num){
        //使用的同步代码块儿
        synchronized (this) {//加锁
            sum += num;
            System.out.println(sum);
       }
        System.out.println("haha");
    }
    //使用的同步函数
    //使用非静态的同步函数
    //相当于默认在synchronized后面有this充当锁
    public synchronized void addMoney1(int num){
        sum += num;
        System.out.println(sum);
    }

    //使用静态同步函数
    //相当于默认在synchronized后面有Bank.class充当锁
    public synchronized static void addMoney2(int num){
        sum += num;
        System.out.println(sum);
    }
}

class CunQian implements Runnable{
    Bank bank = new Bank();
    public void run() {
        for(int i=0;i<3;i++){
            bank.addMoney(100);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/jklcl/article/details/81710056