《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 马 帅相关推荐

  1. Java第十次作业--多线程

    一.学习要点 认真看书并查阅相关资料,掌握以下内容: 理解进程和线程的区别 掌握Java多线程的两种实现方式和区别 理解线程对象的生命周期 熟悉线程控制的基本方法 掌握Java线程的同步机制 理解多线 ...

  2. JAVA第十次作业《第12章 静态属性和方法作业-类的基本定义和使用+static》

    CG系统网址:http://211.81.175.89 static 修饰符 静态变量: static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝. 静态变 ...

  3. P02014158 马帅(信息论课程作业)

    P02014158 马帅(信息论课程作业) 对于信源的发送和接收,我们日常生活中有哪些应用?举里说明其工作原理与信息论的关系 无线通信领域:发送设备将载有信息的信源转化为电信号,并进行编码加密(信息论 ...

  4. “授之以鱼” 不如 “授之以渔“(网页设计-第十次作业-思路分享)

    一,为什么要写一篇思路分享的文章? 预料之外–阅读量上升 因为我将网页制作和java作业整理上传的CSDN的最初原因,是为了数据归档,当然也可以给有需要的朋友参考一下.之前看了一下,好像网页制作的作业 ...

  5. 2021年春季学期-信号与系统-第十次作业参考答案-第六小题

    本博文是 2021年春季学期-信号与系统-第十次作业参考答案 . ▌第六小题 ▌ 6. 求下列 X(z)X\left( z \right)X(z)的逆变换 x[n]x\left[ n \right]x ...

  6. 2021年春季学期-信号与系统-第十次作业参考答案-第五小题

    本博文是 2021年春季学期-信号与系统-第十次作业参考答案 . ▌第五小题 ▌ 5. 利用三种逆在变换方法求下列 X(z)X\left( z \right)X(z)的 逆变换 x[n]x\left[ ...

  7. 2021年春季学期-信号与系统-第十次作业参考答案-第四小题

    <4><4> 本博文是 2021年春季学期-信号与系统-第十次作业参考答案 . ▌第四小题 ▌ 4. 求下列 X(z)X\left( z \right)X(z)的逆变换x[n] ...

  8. 2021年春季学期-信号与系统-第十次作业参考答案-第三小题

    本博文是 2021年春季学期-信号与系统-第十次作业参考答案 . ▌第三小题 ▌ 3.写出下列 z 变换所对应的序列. 作业要求:只做奇数小题 ■ 求解: (1) x[n]=δ[n]x\left[ n ...

  9. 2021年春季学期-信号与系统-第十次作业参考答案-第二小题

    本博文是 2021年春季学期-信号与系统-第十次作业参考答案 . ▌第二小题 ▌ 2. 求下列函数的拉普拉斯逆变换: ln⁡(ss+9)\ln \left( {{s \over {s + 9}}} \ ...

最新文章

  1. mpi和openmp混合编程的优点_西门子PLC可编程控制器CPU1215C一级总代理
  2. 如何保持两个文件的手动同步。
  3. 使用STL的next_permutation函数生成全排列(C++)
  4. 为什么下载源码包需要到官网上去下载?
  5. java 向下转型_Java_向下转型
  6. ML之XGBoost:XGBoost案例应用实战(原生接口实现+Scikit-learn接口实现)
  7. CentOS 下安装
  8. SharePoint 部署解决方案Feature ID冲突
  9. classcastexception异常_内部类、异常以及 LeetCode 每日一题
  10. UnityShader之Shader分类篇【Shader资料2】
  11. 牛客练习赛 67——ST表
  12. matlab V7.0 R14 安装教程
  13. loop设备及losetup命令介绍[转]
  14. 成功的软件系统=成熟产品+全面配置+专业定制
  15. Google搜索 - 世界各国Google网址大全
  16. javaweb超市仓库管理系统
  17. 2022.11.24
  18. HTMl账号密码登录跳转下一个页面问题/网页输入正确的账号面膜登录下一个界面/PHP网页禁止某个链接直链访问
  19. 无穷微积分牵手“知识共享”,如虎添翼,所向无敌
  20. Byte的数值范围为何是-128到127

热门文章

  1. Oracle密码中含有特殊字符时exp,imp的使用
  2. CSS经验分享:如何书写可维护的CSS代码01
  3. bada项目在真机上调试
  4. java8新特性(2)--接口的默认方法
  5. [剑指offer] 61. 序列化二叉树
  6. Sqoop export(Hive to MySQL) 的一些 reference
  7. 定时任务之crond服务
  8. WPF 虚拟化 VirtualizingWrapPanel 和 VirtualLizingTilePanel
  9. 从统计代码来谈JS加载的优化
  10. gdb 打印vector 等stl数据