线程sleep加深理解

对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);
}
}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值