关于线程同步的问题(重入锁实现线程同步)

package com.bootdo.wang;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 4.使用重入锁实现线程同步
 *    ReentrantLock类是可重入、互斥、实现了Lock接口的锁,
 *    它与使用synchronized方法和快具有相同的基本行为和语义,并且扩展了其能力
 *    ReenreantLock类的常用方法有:
 *
 *        ReentrantLock() : 创建一个ReentrantLock实例
 *        lock() : 获得锁
 *        unlock() : 释放锁
 */
public class ReentrantLockSychronization {


    class Bank {
        private int account = 10;

        Lock lock = new ReentrantLock();


        public int getAccount() {
            return account;
        }


        public void saveAccount(int money) {
            lock.lock();
            try {
                account += money;
                System.out.println("account:" + account);
            } finally {
                lock.unlock();
            }
        }


    }

    class ReentrantThread implements Runnable {

        private Bank bank;

        public ReentrantThread(Bank bank) {
            this.bank = bank;
        }

        @Override
        public void run() {

            for (int i = 0; i < 100; i++) {
                bank.saveAccount(10);

                System.out.println(Thread.currentThread().getName() + "-->当前余额:" + bank.getAccount() + "元。");
            }

        }
    }


    public void userReentrantLockThread() {
        Bank bank = new Bank();
        ReentrantThread reentrantThread = new ReentrantThread(bank);

        Thread thread1 = new Thread(reentrantThread);
        Thread thread2 = new Thread(reentrantThread);

        thread1.start();
        thread2.start();


    }

    public static void main(String[] args) {
        ReentrantLockSychronization reentrantLockSychronization = new ReentrantLockSychronization();
        reentrantLockSychronization.userReentrantLockThread();
    }


}

输出:

account:20
account:30
Thread-0-->当前余额:30元。
account:40
Thread-0-->当前余额:40元。
account:50
Thread-0-->当前余额:50元。
account:60
Thread-1-->当前余额:30元。
Thread-0-->当前余额:60元。
account:70
Thread-1-->当前余额:70元。
account:80
Thread-0-->当前余额:80元。
account:90
Thread-1-->当前余额:90元。
account:100
account:110
Thread-0-->当前余额:100元。
Thread-1-->当前余额:110元。
account:120
Thread-0-->当前余额:120元。
account:130
Thread-1-->当前余额:130元。
account:140
Thread-0-->当前余额:140元。
account:150
Thread-1-->当前余额:160元。
account:160
Thread-0-->当前余额:160元。
account:170
Thread-1-->当前余额:170元。
account:180
Thread-0-->当前余额:180元。
account:190
Thread-1-->当前余额:190元。
account:200
Thread-1-->当前余额:200元。
account:210
Thread-1-->当前余额:210元。

猜你喜欢

转载自blog.csdn.net/w893433055/article/details/85394196