package com.kxw.thread.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * Created by kangxiongwei on 2015/7/20. */ public class LockTest { public static void main(String[] args) { Bank bank = new Bank(); new Thread(new BankThread(bank)).start(); new Thread(new BankThread(bank)).start(); } } class Bank { private int money = 1000; Lock lock = new ReentrantLock(); /** * 取钱 * @param number * @return */ public int getMoney(int number) { lock.lock(); try { if(number < 0) { return -1; } else if (number > money) { return -2; } else if (money < 0) { return -3; } else { Thread.sleep(1000); money -= number; return number; } } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } return number; } public int getMoney(){ return money; } } class BankThread implements Runnable { private Bank bank; public BankThread(Bank bank){ this.bank = bank; } @Override public void run() { System.out.println("[取到了]:"+bank.getMoney(800)); System.out.println("[还剩余]:"+bank.getMoney()); } }