失效链接处理 |
使用Java多线程的同步机制编写应用程序 PDF 下载
本站整理下载:
提取码:987b
相关截图:
![]()
主要内容:
一. 实验名称
使用Java多线程的同步机制编写应用程序
二. 实验目的及要求
1.理解并行/并发的概念及其应用场景。
2.理解同步/异步的概念及其应用场景。
3.掌握多线程的同步机制。
三. 实验环境
硬件平台:个人计算机
软件:Windows10
操作系统:Eclipse
四. 实验内容
根据要求,编写应用程序。要求如下:
1.模拟银行账户,两个以上的用户同时进行存、取操作。
2.银行有一个账户,有两个用户分别向同一个账户存3000元,每次存1000,存三次。
3.余额大于取款金额才可取钱
4.多人多次存取完毕后,余额正常
5.当一个用户对金额进行修改时,其他用户应不可进行修改,使用同步机制。
五.实验过程及实验结果
新建bank类,创建三个class:sum(钱总数)、save(存钱)、get(取钱),代码如下:
import java.util.Random;
public class bank {
public static void main(String[] args) {
double money = 0;
sum s = new sum(money);
save savePeople = new save(s);
get getPeople = new get(s);
Thread save1 = new Thread(savePeople, "欣欣");
Thread save2 = new Thread(savePeople, "小小");
Thread get1 = new Thread(getPeople, "亮亮");
Thread get2 = new Thread(getPeople, "猪猪");
Thread get3 = new Thread(getPeople, "皮皮");
save1.start();
save2.start();
get1.start();
get2.start();
get3.start();
}
}
/*钱总数*/
class sum{
double money;
public sum(double money) {
this.money = money;
}
}
/*存钱*/
class save implements Runnable{
sum s;
int num = 3;
public save(sum s) {
this.s = s;
}
@Override
public void run() {
//每次存一千,共存三次
while(true) {
synchronized (s) {
if(num == 0) {
break;
}
else {
num--;
s.money += 1000;
System.out.print(Thread.currentThread().getName() + "存了1000元钱");
System.out.println("------余额: " + s.money);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
s.notifyAll();
}//synchronized
}//while
}
}
/*取钱*/
class get implements Runnable{
sum s;
public get(sum s) {
this.s = s;
}
@Override
public void run() {
while(true) {
synchronized (s) {
if(s.money == 0) {
try {
s.wait();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
//1.随机生成取钱的数额
Random random = new Random();
int getmoney = random.nextInt(3000);
//2.余额>=要取的钱才能取钱,否则将剩余的钱全部取走
if(s.money>=getmoney) {
s.money -=getmoney;
System.out.print(Thread.currentThread().getName() + "取走了"+ getmoney +"元钱");
System.out.println("------余额: " + s.money);
}
else if(s.money!=0){
s.money = 0;
System.out.print(Thread.currentThread().getName() + "取走了剩余的钱");
System.out.println("------余额: " + s.money);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}//synchronized
}//while
}
}
|