- 首先建立一个class Account类,设置全局变量money,这个变量会被所有的线程使用。设置条件。
class Account {
public static int money = 3000; //建立全局变量
public synchronized void taking(int m) {
if(m > money){
System.out.println("余额不足");
}else {
System.out.println( Thread.currentThread().getName() + "账户当前余额:" + money);
System.out.println(Thread.currentThread().getName() + "账户取走金额:" + m);
money1 = money - m;
System.out.println(Thread.currentThread().getName() + "当前剩余金额:" + money);
}
}
}
- 建立person类,并接入Runnable接口。将Account对象作为自身的构造器内的参数,设置 cash变量作为取钱的变量。
class person implements Runnable{
Account account;
int cash;
public person (Account account,int cash){//传递参数
this.account = account;
this.cash = cash;
}
}
- 对Runnable接口方法重写,引用Account类的方法并传递参数cash。
@Override
public void run() {
account.taking(cash);
}
}
- 新建Test类测试,首先new一个Account的对象
public class Test {
public static void main(String[] args) {
Account a = new Account();
- 创建线程接口的对象 new person(),并传递参数将Account类对象a作为Object类,传递cash参数,接着创建多线程Thread对象。
Thread t1 = new Thread(new person(a, 2000)); //创建线程接口对象的thread对象。
Thread t2 = new Thread(new person(a,1000));
- 对Thread类对象设置名称,启动多线程。
t1.setName("微信");
t2.setName("支付宝");
t1.start();
t2.start();
7(注). 由于多线程的并行性,两条线程会争相占用CPU资源,因此需要进行上锁操作。在Account类方法中:public synchronized void taking,就可以使
程序在完成一个线程操作时再进行下一个。一个方法对应一个锁,锁的是一个对象,如果是 static的方法则是对该类的所有实例化对象都上锁。同时也可以用于代码区的上锁。
如果是针对对象要加同步锁,就加在方法上,如果是针对某一段代码加同步锁,直接在代码块加同步锁。
标签:Account,Thread,money,cash,简易,new,多线程,public,取款 From: https://www.cnblogs.com/460759461-zeze/p/18092923