Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!
当前位置: 主页 > Java文档 > Java基础相关 >

使用Java多线程的同步机制编写应用程序 PDF 下载


分享到:
时间:2020-06-23 17:42来源:http://www.java1234.com 作者:小锋  侵权举报
使用Java多线程的同步机制编写应用程序 PDF 下载
失效链接处理
使用Java多线程的同步机制编写应用程序 PDF 下载

本站整理下载:
 
相关截图:
 
主要内容:
一. 实验名称
使用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
}
}

 
------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐