|
@@ -0,0 +1,114 @@
|
|
|
+package com.sf.thread_new.bank;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+public class DrawThread extends Thread {
|
|
|
+
|
|
|
+
|
|
|
+ private Account account;
|
|
|
+
|
|
|
+ private double drawAmount;
|
|
|
+
|
|
|
+
|
|
|
+ public DrawThread(String name, Account account, double drawAmount) {
|
|
|
+ super(name);
|
|
|
+ this.account = account;
|
|
|
+ this.drawAmount = drawAmount;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+
|
|
|
+ account.handle(drawAmount);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public synchronized void handle(){}
|
|
|
+ public void handle1(){
|
|
|
+
|
|
|
+ synchronized (this){}
|
|
|
+ }
|
|
|
+ public synchronized static void handle2(Account account, double drawAmount){
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ public void handle3(){
|
|
|
+
|
|
|
+ synchronized (DrawThread.class){}
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ Account account = new Account("001", 1000);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ for (int i = 0; i < 10; i++) {
|
|
|
+ new DrawThread(i + "", account, 600).start();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+class Account {
|
|
|
+ private String accountNo;
|
|
|
+ private double balance;
|
|
|
+
|
|
|
+ public Account() {
|
|
|
+ }
|
|
|
+
|
|
|
+ public Account(String accountNo, double balance) {
|
|
|
+ this.accountNo = accountNo;
|
|
|
+ this.balance = balance;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public synchronized void handle(double drawAmount){
|
|
|
+ if (this.balance >= drawAmount) {
|
|
|
+ try {
|
|
|
+ Thread.sleep(200);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.balance = balance - drawAmount;
|
|
|
+ System.out.println(Thread.currentThread().getName() + "取钱成功,余额为:" + balance);
|
|
|
+ } else {
|
|
|
+ System.out.println(Thread.currentThread().getName() + "余额不足");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public String getAccountNo() {
|
|
|
+ return accountNo;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setAccountNo(String accountNo) {
|
|
|
+ this.accountNo = accountNo;
|
|
|
+ }
|
|
|
+
|
|
|
+ public double getBalance() {
|
|
|
+ return balance;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setBalance(double balance) {
|
|
|
+ this.balance = balance;
|
|
|
+ }
|
|
|
+}
|