Java第十次作业 1502 马 帅
《Java技术》第十次作业
(一)学习总结
1.
2.如下代码:
public class TortoiseHareRace {public static void main(String[] args) {int totalStep = 10;int tortoiseStep = 0;int hareStep = 0;boolean[] flags = {true,false};System.out.println("龟兔赛跑开始了...");while(tortoiseStep < totalStep && hareStep < totalStep){tortoiseStep++;System.out.println("乌龟跑了"+tortoiseStep+"步...");boolean isHareSleep = flags[((int)(Math.random()*10))%2];if(isHareSleep){System.out.println("兔子睡着了zzzz");}else{hareStep += 2;System.out.println("兔子跑了"+hareStep+"步...");}} }
}
使用Runnable接口完善后的代码如下:
public class TortoiseHareRace { public static void main(String[] args) {Tortoise tortoise = new Tortoise(10);Hare hare = new Hare(10);Thread tortoiseThread = new Thread(tortoise);Thread hareThread = new Thread(hare);System.out.println("龟兔赛跑开始了...");tortoiseThread.start();hareThread.start();}
}
class Tortoise implements Runnable{private int step;public Tortoise(){}public Tortoise(int step){this.step=step;}public void run() {int tortoiseStep = 0;while(tortoiseStep < step){try {Thread.sleep(1000);tortoiseStep++;System.out.println("乌龟跑了"+tortoiseStep+"步...");} catch (InterruptedException e) {e.printStackTrace();}} }}
class Hare implements Runnable{private int step;public Hare(){}public Hare(int step){this.step=step;}public void run() {int hareStep = 0;boolean[] flags = {true,false};while(hareStep <step){try {Thread.sleep(1000);boolean isHareSleep = flags[((int)(Math.random()*10))%2];if(isHareSleep){System.out.println("兔子睡着了zzzz");}else{hareStep += 2;System.out.println("兔子跑了"+hareStep+"步...");}} catch (InterruptedException e) {e.printStackTrace();}} }}
3.如下代码:
class Consumer implements Runnable {private Clerk clerk;public Consumer(Clerk clerk) {this.clerk = clerk;}public void run() {System.out.println("消费者开始消耗整数......");// 消耗10个整数for(int i = 1; i <= 10; i++) {try {// 等待随机时间Thread.sleep((int) (Math.random() * 3000));}catch(InterruptedException e) {e.printStackTrace();} clerk.getProduct();// 从店员处取走整数}}}
class Producer implements Runnable {private Clerk clerk;public Producer(Clerk clerk) {this.clerk = clerk;}public void run() {System.out.println( "生产者开始生产整数......");// 生产1到10的整数for(int product = 1; product <= 10; product++) {try {Thread.sleep((int) Math.random() * 3000);}catch(InterruptedException e) {e.printStackTrace();}clerk.setProduct(product); // 将产品交给店员}}
}
public class ProductTest {public static void main(String[] args) {Clerk clerk = new Clerk();Thread consumerThread = new Thread(new Consumer(clerk)); Thread producerThread = new Thread(new Producer(clerk)); consumerThread.start(); producerThread.start(); }
}
class Clerk {private int product = -1; // -1 表示目前没有产品 // 这个方法由生产者呼叫public void setProduct(int product) {this.product = product; System.out.printf("生产者设定 (%d)%n", this.product); } // 这个方法由消费者呼叫public int getProduct() { int p = this.product; System.out.printf("消费者取走 (%d)%n", this.product); return p; }
}
运行结果为
没有进行同步,而且当生产者生产过快时,消费者可能不会取走产品,修改Clerk类:
class Clerk {private int product = -1; // -1 表示目前没有产品 // 这个方法由生产者呼叫public synchronized void setProduct(int product) { //同步代码this.product = product; System.out.printf("生产者设定 (%d)%n", this.product);try {wait(); //线程中断} catch (InterruptedException e) {e.printStackTrace();}} // 这个方法由消费者呼叫public synchronized int getProduct() { int p = this.product; System.out.printf("消费者取走 (%d)%n", this.product);notify(); //唤醒线程return p; }
}
(二)实验总结
1.模拟三个老师同时分发80分作业,每个老师相当于一个线程。
- 程序设计思路:
声明Teacher类继承Runnable接口,定义homework值为1,重写run()方法,使用循环,每次调用时输出当前线程和分发作业数。
在main()中,声明一个Teacher类的对象,和三个Thread类的线程,作为三个老师,分别使用start()方法开始线程。 - 实验问题分析:
问题1:在输出运行结果时,总可以看到第一份作业被三个老师同时分发,而其后的作业没有出现这种错误。
解决方案:在循环之前输出当前线程和分发作业数,并使作业书加1,错误消除。
2.模拟一个银行存款的程序。假设有两个储户都去银行往同一个账户进行存款,一次存100,每人存三次。要求储户每存一次钱,账户余额增加100,并在控制台输出当前账户的余额。
- 程序设计思路:
声明Bank类,构造方法,将存款进行更新。
声明User类继承Runnable接口,重写run()方法,使用循环,使用synchronized(this)同步代码块,输出当前线程和存入后的存款。
测试类,main()方法中声明一个User类对象,和两个Thread类线程作为用户,使用start()方法开始线程
(三)代码托管
- 码云commit历史截图
转载于:https://www.cnblogs.com/masart/p/6930189.html
Java第十次作业 1502 马 帅相关推荐
- Java第十次作业--多线程
一.学习要点 认真看书并查阅相关资料,掌握以下内容: 理解进程和线程的区别 掌握Java多线程的两种实现方式和区别 理解线程对象的生命周期 熟悉线程控制的基本方法 掌握Java线程的同步机制 理解多线 ...
- JAVA第十次作业《第12章 静态属性和方法作业-类的基本定义和使用+static》
CG系统网址:http://211.81.175.89 static 修饰符 静态变量: static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝. 静态变 ...
- P02014158 马帅(信息论课程作业)
P02014158 马帅(信息论课程作业) 对于信源的发送和接收,我们日常生活中有哪些应用?举里说明其工作原理与信息论的关系 无线通信领域:发送设备将载有信息的信源转化为电信号,并进行编码加密(信息论 ...
- “授之以鱼” 不如 “授之以渔“(网页设计-第十次作业-思路分享)
一,为什么要写一篇思路分享的文章? 预料之外–阅读量上升 因为我将网页制作和java作业整理上传的CSDN的最初原因,是为了数据归档,当然也可以给有需要的朋友参考一下.之前看了一下,好像网页制作的作业 ...
- 2021年春季学期-信号与系统-第十次作业参考答案-第六小题
本博文是 2021年春季学期-信号与系统-第十次作业参考答案 . ▌第六小题 ▌ 6. 求下列 X(z)X\left( z \right)X(z)的逆变换 x[n]x\left[ n \right]x ...
- 2021年春季学期-信号与系统-第十次作业参考答案-第五小题
本博文是 2021年春季学期-信号与系统-第十次作业参考答案 . ▌第五小题 ▌ 5. 利用三种逆在变换方法求下列 X(z)X\left( z \right)X(z)的 逆变换 x[n]x\left[ ...
- 2021年春季学期-信号与系统-第十次作业参考答案-第四小题
<4><4> 本博文是 2021年春季学期-信号与系统-第十次作业参考答案 . ▌第四小题 ▌ 4. 求下列 X(z)X\left( z \right)X(z)的逆变换x[n] ...
- 2021年春季学期-信号与系统-第十次作业参考答案-第三小题
本博文是 2021年春季学期-信号与系统-第十次作业参考答案 . ▌第三小题 ▌ 3.写出下列 z 变换所对应的序列. 作业要求:只做奇数小题 ■ 求解: (1) x[n]=δ[n]x\left[ n ...
- 2021年春季学期-信号与系统-第十次作业参考答案-第二小题
本博文是 2021年春季学期-信号与系统-第十次作业参考答案 . ▌第二小题 ▌ 2. 求下列函数的拉普拉斯逆变换: ln(ss+9)\ln \left( {{s \over {s + 9}}} \ ...
最新文章
- mpi和openmp混合编程的优点_西门子PLC可编程控制器CPU1215C一级总代理
- 如何保持两个文件的手动同步。
- 使用STL的next_permutation函数生成全排列(C++)
- 为什么下载源码包需要到官网上去下载?
- java 向下转型_Java_向下转型
- ML之XGBoost:XGBoost案例应用实战(原生接口实现+Scikit-learn接口实现)
- CentOS 下安装
- SharePoint 部署解决方案Feature ID冲突
- classcastexception异常_内部类、异常以及 LeetCode 每日一题
- UnityShader之Shader分类篇【Shader资料2】
- 牛客练习赛 67——ST表
- matlab V7.0 R14 安装教程
- loop设备及losetup命令介绍[转]
- 成功的软件系统=成熟产品+全面配置+专业定制
- Google搜索 - 世界各国Google网址大全
- javaweb超市仓库管理系统
- 2022.11.24
- HTMl账号密码登录跳转下一个页面问题/网页输入正确的账号面膜登录下一个界面/PHP网页禁止某个链接直链访问
- 无穷微积分牵手“知识共享”,如虎添翼,所向无敌
- Byte的数值范围为何是-128到127