關於執行緒同步的問題(重入鎖實現執行緒同步)
阿新 • • 發佈:2019-01-11
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元。