首页 > 代码库 > Java复习-同步代码块

Java复习-同步代码块

package Mytread;
public class Bank extends Thread{
private double drawAmount;
private Account account;
public Bank(String coun_num,Account account,double drawAmount){
super(coun_num);
this.account=account;
this.drawAmount=drawAmount;
}
public void run(){
//使用account作为同步监视器,任何线程进入下面的代码块之前,必须先获得account账户的锁定,
//其他线程无法获得锁,也就无法修饰它,这种做法符合修改加锁,释放锁的逻辑
synchronized (account) {
if(account.get_money()>0){
System.out.println("取钱成功"+" "+"取款数:"+" "+drawAmount);
}else{
System.out.println("取钱失败");
}

System.out.println("账户余额为:"+" "+account.get_money());
}
}
}

同步代码块:

同步方法:

通过使用同步方法可以通过可以非常方便实现线程安全的类,线程安全的类具有如下特征

该类的对象可以被多个线程安全的访问

每个线程调用该对象以后都能得到正确的方法,每个线程调用该对象的任意的方法之后,该对象依然保持合理状态。

package Mytread;

import java.math.BigDecimal;

public class Mybank extends Thread{
private Acount myacount;
private BigDecimal money_get;
public Mybank(){}
public Mybank(String name,Acount myAcount,BigDecimal money_get){
super(name);
this.myacount=myAcount;
this.money_get=money_get;
}
public static void main(String[] args){
Acount lee=new Acount("LEE", new BigDecimal("10000"));
for(int i = 0;i<1000;i++){
Mybank mybank=new Mybank("lilang"+i, lee, new BigDecimal("50"));
Mybank mybank2=new Mybank("lilang"+i, lee, new BigDecimal("40"));
mybank.start();
mybank2.start();
}

}
public void run(){
try {
myacount.get_money(myacount,money_get);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

 

package Mytread;

import java.math.BigDecimal;

public class Acount {
private String account_name;
private BigDecimal money_sum;
public Acount(){}
public Acount(String account_name,BigDecimal money_sum){
this.account_name=account_name;
this.money_sum=money_sum;
}
public synchronized void get_money(Acount acount,BigDecimal money_get) throws Exception{
if(acount.money_sum.doubleValue()>0){
acount.money_sum=acount.money_sum.subtract(money_get);
if(acount.money_sum.intValue()<0){
acount.money_sum=acount.money_sum.add(money_get);
System.out.println(Thread.currentThread().getName()+" 账户余额不足 "+"余额为:"+acount.money_sum);
return;
}
System.out.println(Thread.currentThread().getName()+" 取款为:"+money_get);

System.out.println(Thread.currentThread().getName()+" 账户余额为:"+acount.money_sum);
}else{
throw new Exception("您的账户余额不足!");
}

}

}

同步进程的方法

lilang0 取款为:50
lilang0 账户余额为:9950
lilang0 取款为:40
lilang0 账户余额为:9910
lilang1 取款为:50
lilang1 账户余额为:9860
lilang1 取款为:40
lilang1 账户余额为:9820
lilang2 取款为:50
lilang2 账户余额为:9770
lilang3 取款为:50
lilang3 账户余额为:9720
lilang3 取款为:40
lilang3 账户余额为:9680
lilang4 取款为:40
lilang4 账户余额为:9640
lilang5 取款为:50
lilang5 账户余额为:9590
lilang6 取款为:50
lilang6 账户余额为:9540
lilang6 取款为:40
lilang6 账户余额为:9500
lilang7 取款为:50
lilang7 账户余额为:9450
lilang7 取款为:40
lilang7 账户余额为:9410
lilang8 取款为:50
lilang8 账户余额为:9360
lilang9 取款为:40
lilang9 账户余额为:9320
lilang8 取款为:40
lilang8 账户余额为:9280
lilang10 取款为:50
lilang10 账户余额为:9230
lilang10 取款为:40
lilang10 账户余额为:9190
lilang12 取款为:50
lilang12 账户余额为:9140
lilang11 取款为:40
lilang11 账户余额为:9100
lilang12 取款为:40
lilang12 账户余额为:9060
lilang13 取款为:50
lilang13 账户余额为:9010
lilang13 取款为:40
lilang13 账户余额为:8970
lilang14 取款为:40
lilang14 账户余额为:8930
lilang15 取款为:50
lilang15 账户余额为:8880
lilang15 取款为:40
lilang15 账户余额为:8840
lilang16 取款为:50
lilang16 账户余额为:8790
lilang16 取款为:40
lilang16 账户余额为:8750
lilang17 取款为:50
lilang17 账户余额为:8700
lilang17 取款为:40
lilang17 账户余额为:8660
lilang18 取款为:40
lilang18 账户余额为:8620
lilang19 取款为:40
lilang19 账户余额为:8580
lilang20 取款为:50
lilang20 账户余额为:8530
lilang20 取款为:40
lilang20 账户余额为:8490
lilang21 取款为:50
lilang21 账户余额为:8440
lilang21 取款为:40
lilang21 账户余额为:8400
lilang23 取款为:50
lilang23 账户余额为:8350
lilang23 取款为:40
lilang23 账户余额为:8310
lilang24 取款为:50
lilang24 账户余额为:8260
lilang24 取款为:40
lilang24 账户余额为:8220
lilang25 取款为:50
lilang25 账户余额为:8170
lilang25 取款为:40
lilang25 账户余额为:8130
lilang26 取款为:50
lilang26 账户余额为:8080
lilang26 取款为:40
lilang26 账户余额为:8040
lilang27 取款为:50
lilang27 账户余额为:7990
lilang28 取款为:40
lilang28 账户余额为:7950
lilang29 取款为:50
lilang29 账户余额为:7900
lilang29 取款为:40
lilang29 账户余额为:7860
lilang30 取款为:50
lilang30 账户余额为:7810
lilang18 取款为:50
lilang18 账户余额为:7760
lilang44 取款为:50
lilang44 账户余额为:7710
lilang43 取款为:50
lilang43 账户余额为:7660
lilang32 取款为:40
lilang32 账户余额为:7620
lilang32 取款为:50
lilang32 账户余额为:7570
lilang27 取款为:40
lilang27 账户余额为:7530
lilang2 取款为:40
lilang2 账户余额为:7490
lilang41 取款为:40
lilang41 账户余额为:7450
lilang5 取款为:40
lilang5 账户余额为:7410
lilang43 取款为:40
lilang43 账户余额为:7370
lilang39 取款为:50
lilang39 账户余额为:7320
lilang41 取款为:50
lilang41 账户余额为:7270
lilang40 取款为:50
lilang40 账户余额为:7220
lilang39 取款为:40
lilang39 账户余额为:7180
lilang38 取款为:40
lilang38 账户余额为:7140
lilang37 取款为:50
lilang37 账户余额为:7090
lilang37 取款为:40
lilang37 账户余额为:7050
lilang38 取款为:50
lilang38 账户余额为:7000
lilang36 取款为:40
lilang36 账户余额为:6960
lilang35 取款为:40
lilang35 账户余额为:6920
lilang35 取款为:50
lilang35 账户余额为:6870
lilang34 取款为:40
lilang34 账户余额为:6830
lilang34 取款为:50
lilang34 账户余额为:6780
lilang31 取款为:50
lilang31 账户余额为:6730
lilang30 取款为:40
lilang30 账户余额为:6690
lilang28 取款为:50
lilang28 账户余额为:6640
lilang22 取款为:40
lilang22 账户余额为:6600
lilang22 取款为:50
lilang22 账户余额为:6550
lilang19 取款为:50
lilang19 账户余额为:6500
lilang42 取款为:40
lilang42 账户余额为:6460
lilang4 取款为:50
lilang4 账户余额为:6410
lilang9 取款为:50
lilang9 账户余额为:6360
lilang11 取款为:50
lilang11 账户余额为:6310
lilang14 取款为:50
lilang14 账户余额为:6260
lilang31 取款为:40
lilang31 账户余额为:6220
lilang33 取款为:50
lilang33 账户余额为:6170
lilang33 取款为:40
lilang33 账户余额为:6130
lilang36 取款为:50
lilang36 账户余额为:6080
lilang40 取款为:40
lilang40 账户余额为:6040
lilang45 取款为:40
lilang45 账户余额为:6000
lilang42 取款为:50
lilang42 账户余额为:5950
lilang45 取款为:50
lilang45 账户余额为:5900
lilang44 取款为:40
lilang44 账户余额为:5860
lilang46 取款为:50
lilang46 账户余额为:5810
lilang46 取款为:40
lilang46 账户余额为:5770
lilang47 取款为:50
lilang47 账户余额为:5720
lilang47 取款为:40
lilang47 账户余额为:5680
lilang48 取款为:50
lilang48 账户余额为:5630
lilang48 取款为:40
lilang48 账户余额为:5590
lilang49 取款为:50
lilang49 账户余额为:5540
lilang49 取款为:40
lilang49 账户余额为:5500
lilang50 取款为:50
lilang50 账户余额为:5450
lilang50 取款为:40
lilang50 账户余额为:5410
lilang51 取款为:50
lilang51 账户余额为:5360
lilang51 取款为:40
lilang51 账户余额为:5320
lilang52 取款为:50
lilang52 账户余额为:5270
lilang52 取款为:40
lilang52 账户余额为:5230
lilang53 取款为:50
lilang53 账户余额为:5180
lilang53 取款为:40
lilang53 账户余额为:5140
lilang54 取款为:50
lilang54 账户余额为:5090
lilang54 取款为:40
lilang54 账户余额为:5050
lilang55 取款为:50
lilang55 账户余额为:5000
lilang55 取款为:40
lilang55 账户余额为:4960
lilang56 取款为:50
lilang56 账户余额为:4910
lilang56 取款为:40
lilang56 账户余额为:4870
lilang57 取款为:50
lilang57 账户余额为:4820
lilang57 取款为:40
lilang57 账户余额为:4780
lilang58 取款为:50
lilang58 账户余额为:4730
lilang58 取款为:40
lilang58 账户余额为:4690
lilang59 取款为:40
lilang59 账户余额为:4650
lilang60 取款为:40
lilang60 账户余额为:4610
lilang61 取款为:50
lilang61 账户余额为:4560
lilang61 取款为:40
lilang61 账户余额为:4520
lilang62 取款为:40
lilang62 账户余额为:4480
lilang63 取款为:50
lilang63 账户余额为:4430
lilang63 取款为:40
lilang63 账户余额为:4390
lilang64 取款为:50
lilang64 账户余额为:4340
lilang64 取款为:40
lilang64 账户余额为:4300
lilang65 取款为:50
lilang65 账户余额为:4250
lilang66 取款为:50
lilang66 账户余额为:4200
lilang65 取款为:40
lilang65 账户余额为:4160
lilang66 取款为:40
lilang66 账户余额为:4120
lilang67 取款为:50
lilang67 账户余额为:4070
lilang67 取款为:40
lilang67 账户余额为:4030
lilang68 取款为:50
lilang68 账户余额为:3980
lilang68 取款为:40
lilang68 账户余额为:3940
lilang69 取款为:50
lilang69 账户余额为:3890
lilang70 取款为:50
lilang70 账户余额为:3840
lilang70 取款为:40
lilang70 账户余额为:3800
lilang71 取款为:50
lilang71 账户余额为:3750
lilang71 取款为:40
lilang71 账户余额为:3710
lilang72 取款为:50
lilang72 账户余额为:3660
lilang72 取款为:40
lilang72 账户余额为:3620
lilang73 取款为:50
lilang73 账户余额为:3570
lilang73 取款为:40
lilang73 账户余额为:3530
lilang74 取款为:50
lilang74 账户余额为:3480
lilang74 取款为:40
lilang74 账户余额为:3440
lilang75 取款为:50
lilang75 账户余额为:3390
lilang59 取款为:50
lilang59 账户余额为:3340
lilang60 取款为:50
lilang60 账户余额为:3290
lilang69 取款为:40
lilang69 账户余额为:3250
lilang75 取款为:40
lilang75 账户余额为:3210
lilang76 取款为:50
lilang76 账户余额为:3160
lilang76 取款为:40
lilang76 账户余额为:3120
lilang77 取款为:50
lilang77 账户余额为:3070
lilang77 取款为:40
lilang77 账户余额为:3030
lilang78 取款为:50
lilang78 账户余额为:2980
lilang78 取款为:40
lilang78 账户余额为:2940
lilang79 取款为:50
lilang79 账户余额为:2890
lilang79 取款为:40
lilang79 账户余额为:2850
lilang80 取款为:50
lilang80 账户余额为:2800
lilang80 取款为:40
lilang80 账户余额为:2760
lilang81 取款为:50
lilang81 账户余额为:2710
lilang82 取款为:50
lilang82 账户余额为:2660
lilang81 取款为:40
lilang81 账户余额为:2620
lilang82 取款为:40
lilang82 账户余额为:2580
lilang62 取款为:50
lilang62 账户余额为:2530
lilang83 取款为:50
lilang83 账户余额为:2480
lilang83 取款为:40
lilang83 账户余额为:2440
lilang84 取款为:50
lilang84 账户余额为:2390
lilang84 取款为:40
lilang84 账户余额为:2350
lilang85 取款为:50
lilang85 账户余额为:2300
lilang85 取款为:40
lilang85 账户余额为:2260
lilang86 取款为:50
lilang86 账户余额为:2210
lilang86 取款为:40
lilang86 账户余额为:2170
lilang87 取款为:50
lilang87 账户余额为:2120
lilang87 取款为:40
lilang87 账户余额为:2080
lilang88 取款为:50
lilang88 账户余额为:2030
lilang88 取款为:40
lilang88 账户余额为:1990
lilang89 取款为:50
lilang89 账户余额为:1940
lilang89 取款为:40
lilang89 账户余额为:1900
lilang90 取款为:50
lilang90 账户余额为:1850
lilang90 取款为:40
lilang90 账户余额为:1810
lilang91 取款为:50
lilang91 账户余额为:1760
lilang91 取款为:40
lilang91 账户余额为:1720
lilang92 取款为:50
lilang92 账户余额为:1670
lilang93 取款为:50
lilang93 账户余额为:1620
lilang93 取款为:40
lilang93 账户余额为:1580
lilang94 取款为:50
lilang94 账户余额为:1530
lilang94 取款为:40
lilang94 账户余额为:1490
lilang95 取款为:50
lilang95 账户余额为:1440
lilang95 取款为:40
lilang95 账户余额为:1400
lilang96 取款为:50
lilang96 账户余额为:1350
lilang96 取款为:40
lilang96 账户余额为:1310
lilang97 取款为:50
lilang97 账户余额为:1260
lilang97 取款为:40
lilang97 账户余额为:1220
lilang98 取款为:50
lilang98 账户余额为:1170
lilang98 取款为:40
lilang98 账户余额为:1130
lilang99 取款为:50
lilang99 账户余额为:1080
lilang99 取款为:40
lilang99 账户余额为:1040
lilang100 取款为:50
lilang100 账户余额为:990
lilang100 取款为:40
lilang100 账户余额为:950
lilang101 取款为:50
lilang101 账户余额为:900
lilang101 取款为:40
lilang101 账户余额为:860
lilang102 取款为:50
lilang102 账户余额为:810
lilang102 取款为:40
lilang102 账户余额为:770
lilang103 取款为:50
lilang103 账户余额为:720
lilang103 取款为:40
lilang103 账户余额为:680
lilang104 取款为:50
lilang104 账户余额为:630
lilang104 取款为:40
lilang104 账户余额为:590
lilang105 取款为:50
lilang105 账户余额为:540
lilang105 取款为:40
lilang105 账户余额为:500
lilang106 取款为:50
lilang106 账户余额为:450
lilang106 取款为:40
lilang106 账户余额为:410
lilang107 取款为:50
lilang107 账户余额为:360
lilang107 取款为:40
lilang107 账户余额为:320
lilang108 取款为:50
lilang108 账户余额为:270
lilang108 取款为:40
lilang108 账户余额为:230
lilang110 取款为:50
lilang110 账户余额为:180
lilang111 取款为:50
lilang111 账户余额为:130
lilang110 取款为:40
lilang110 账户余额为:90
lilang109 取款为:40
lilang109 账户余额为:50
lilang111 取款为:40
lilang111 账户余额为:10
lilang112 账户余额不足 余额为:10
lilang92 账户余额不足 余额为:10
lilang109 账户余额不足 余额为:10
lilang113 账户余额不足 余额为:10

部分结果

技术分享

 

Java复习-同步代码块