1. 程式人生 > >關於執行緒同步的問題(重入鎖實現執行緒同步)

關於執行緒同步的問題(重入鎖實現執行緒同步)

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元。