java 线程资源同步_java多线程同步资源上的问题

下面是我的代码----------------------------------------------告诉我到底为什么我怎么都不能同步?/*本例子是用来记录java中多线程的学习的。举个很简单的例子。你你在吃饭,同时还要...

下面是我的代码

----------------------------------------------

告诉我到底为什么我怎么都不能同步?

/*

本例子是用来记录java中多线程的学习的。

举个很简单的例子。你你在吃饭,同时还要看电视,这时候你发现,你的手在拿筷子,你的嘴巴在嚼东西。你的眼睛在看电视。

然而都是一起进行的。这就好比多线程,如果你要打印一张图片,还要算1+1等于几,还要发个邮件给别人。

这个时候你的计算机首先打印,但是打印机还没有打印结束的时候你就不能继续执行下一代吗也就是不能进行计算1+1还有发邮件

这样不可以因为打印慢就要等着,就像你不会因为在吃东西就停止眼睛看电视,要同时进行工作,这就是多线程存在的原因。

*/

/**

*此类想要达到的效果

* 在时间上不是同时进行,并且不会出现amount变成负数

*

*/

import static java.lang.System.out;

import java.util.*;

class Account {

String holderName;

float amount;

public Account(String name, float amt) {

holderName = name;

amount = amt;

}

public void deposit(float amt) {

amount += amt;

}

public void withdraw(float amt) {

amount -= amt;

}

public float checkBalance() {

return amount;

}

}

/*

* 用来操作Account的类 Thread本事是一个Runnable的实现类。

* 所以创建Thread实现类的时候需要传递一个Runnable接口的实现类做参数

*/

public class synchronousRunnable extends Thread {

private Account account;

public synchronousRunnable(String name, Account account) {

this.setName(name);

this.account = account;

}

public void run() {

boolean isNoMoney = false;

while (!isNoMoney) {

if (account.checkBalance() - 600.5 > 0) {

try {

Thread.sleep(200);

} catch (Exception e) {

e.printStackTrace();

}

account.withdraw(600.5F);

String ThreadName =this.getName();

String holderName =account.holderName;

float Balance=account.checkBalance();

out.printf("%s取走了%s的600.5,还剩下=>%f 时间是:%s\n",ThreadName,holderName,Balance,new Date().getTime());

//out.print(+ "取走了"++"600.5,还剩下"+);

} else

isNoMoney = true;

}

}

public static void main(String args[]) {

Account account = new Account("张三", 20000.0F);

synchronousRunnable th1 = new synchronousRunnable("线程1", account);

synchronousRunnable th2 = new synchronousRunnable("线程2", account);

// th1.setPriority(2);

// th2.setPriority(9);

th1.start();

th2.start();

}

}

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值