1.方法具有封装性;

  /**
     * 1.方法具有封装性;
     */
    public void addMoney(double moneyAsset) {

        this.moneyAsset += moneyAsset;
        System.out.println(Thread.currentThread().getName() + "存入" + this.moneyAsset + "元");

    }

 

2.synchronized同步代码块具有同步代码锁机制

  /**
     * 1.方法具有封装性;
     */
    public void addMoney(double moneyAsset) {

        /**
         * 2.synchronized同步代码块具有同步代码锁机制
         * 多线程执行共享数据/变化共享数据的代码,然后用synchronized{}
         */
        synchronized (Bank.class) { // 只持有一把锁Bank.class
            this.moneyAsset += moneyAsset;
            System.out.println(Thread.currentThread().getName() + "存入" + this.moneyAsset + "元");
        }
    }

 

3.可以让方法具有封装性 并 具有同步代码锁机制

伪代码:synchronized(this)

  public synchronized(this) void addMoney(double moneyAsset) {

  }

 

开发代码:

  /**
     * 3.可以让方法具有封装性 并 具有同步代码锁机制public synchronized void addMoney
     *   synchronized修饰的方法,同步锁机制的锁🔒是this
     *   多线程执行共享数据/变化共享数据的代码,然后用synchronized
     */
    public synchronized void addMoney(double moneyAsset) {

        // synchronized (Bank.class) { // 只持有一把锁Bank.class
            this.moneyAsset += moneyAsset;
            System.out.println(Thread.currentThread().getName() + "存入" + this.moneyAsset + "元");
        // }
    }

 

可以让方法具有封装性 并 具有同步代码锁机制(案例代码)

synchronized修饰的方法,同步锁机制的锁🔒是this
synchronized修饰的方法,同步锁机制的锁🔒是this 也就是customer
package android.java.thread11;

/**
 * 两个储户,到同一个银行存钱,每个人存了3次,一次1000000.00元
 * 1.描述银行
 * 2.描述储户任务
 * 3.分析这个多线程是否存在安全隐患
 */

/**
 * 1.描述银行
 */
class Bank {

    // 3.分析这个多线程是否存在安全隐患 这里就是多线程执行的共享对象的共享数据
    private double moneyAsset;

    /**
     * 3.可以让方法具有封装性 并 具有同步代码锁机制public synchronized void addMoney
     *   synchronized修饰的方法,同步锁机制的锁🔒是this
     *   多线程执行共享数据/变化共享数据的代码,然后用synchronized
     */
    public synchronized void addMoney(double moneyAsset) {

        // synchronized (Bank.class) { // 只持有一把锁Bank.class
            this.moneyAsset += moneyAsset;
            System.out.println(Thread.currentThread().getName() + "存入" + this.moneyAsset + "元");
        // }
    }

}

/**
 * 2.描述储户任务
 */
class Customer implements Runnable {

    // 3.分析这个多线程是否存在安全隐患 这里就是多线程执行的共享对象
    private Bank bank = new Bank();

    @Override
    public void run() {
        for (int i = 0; i < 3; i++) {

            bank.addMoney(1000000.00);
        }
    }
}

public class BankTest {

    public static void main(String[] args) {

        /**
         * 定义执行的任务 synchronized修饰的方法,同步锁机制的锁🔒是this 也就是customer
         */
        Runnable customer = new Customer();

        // 线程执行>>>定义执行的任务
        new Thread(customer).start();
        new Thread(customer).start();
    }

}

 

执行结果: