下面是我的代码----------------------------------------------告诉我到底为什么我怎么都不能同步?/*本例子是用来记录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();
}
}
展开