对java的synchronized与sleep进一步理解
package Thread;
public class Testsyn{
public static void main(String[] args) {
Account account = new Account(100,“结婚礼金”);
GetMoney g = new GetMoney(account,90,“可怜的你”);
GetMoney g1 = new GetMoney(account,80,“开心的她”);
Thread t = new Thread(g);
Thread t1 = new Thread(g1);
t.start();
t1.start();
}
}
class Account{
int TotalMoney;
String name;
public Account(int totalmoney, String name) {
this.TotalMoney = totalmoney;
this.name = name;
}
}
class GetMoney implements Runnable{
Account account;
int drawingmoney;
int packetmoney;
String name;
public GetMoney(Account account,int drawingmoney,String name) {
this.account = account;
this.drawingmoney = drawingmoney;
this.name = name;
}
@Override
public void run() {
// TODO Auto-generated method stub
test();
}
public void test() {
//可以提高性能
if(account.TotalMoney<0){
return;
}
//对account上锁,每一步都会上锁,可通过上述方法提高性能
synchronized(account) {
if(account.TotalMoney-drawingmoney<0){
return;
}
try {
//使得其他线程可以有机会得到执行权(slepp(0)有机会让cpu重新计算优先级,使得其他线程有可能执行),
// 若没有sleep,t2可能没有执行权,只有t1会执行
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
account.TotalMoney = account.TotalMoney-drawingmoney;
packetmoney =packetmoney+drawingmoney;
System.out.println(this.name+“拿了”+packetmoney);
System.out.println(account.name+“还有”+account.TotalMoney);
}
}
}