实验10 王奕开

1.思维导图
1080047-20170603113754180-1149619960.png
2.阅读程序,采用实现Runnable接口的方式用多线程实现这个小游戏。下面给出主线程类,补充Tortoise线程类和Hare线程类。
class Tortoise implements Runnable {
private int totalStep;
private int tortoiseDistance = 0;
public Tortoise(int totalStep) {
this.totalStep = totalStep;
}
public void run() {
running();
}
private synchronized void running() {
while (tortoiseDistance < totalStep) {
tortoiseStep++;
System.out.println("乌龟爬了" + tortoiseDistance + "步");
}
}
}
class Hare implements Runnable {
private int totalStep;
private int hareDistance = 0;
public Hare(int totalStep) {
this.totalStep = totalStep;
}
private synchronized void running() {
boolean[] flags = { true, false };
while (hareDistance < totalStep) {
boolean isHareSleep = flags[((int) (Math.random() * 10)) % 2];
if (isHareSleep) {
System.out.println("兔子睡着了zzzz");
} else {
hareDistance += 2;
System.out.println("兔子跑了" + hareDistance + "步");
}
}
}
public void run() {
running();
}
}
3.下面的程序是模拟了生产者——消费者问题,生产者生产10个数,消费者依次消费10个数,运行程序,看结果是否正常?存在什么问题?说明原因。使用synchronized, wait, notify解决程序出现的问题。写出修改的部分程序即可。
class Clerk {
private int product = -1; // -1 表示目前没有产品
private int P ;
// 这个方法由生产者呼叫
public synchronized void setProduct(int product) {
if (this.product != -1) {
try {
super.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.product = product;
P = this.product;
System.out.printf("生产者设定 (%d)%n", this.product);
getProduct();
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.product = -1;
super.notify();
}
// 这个方法由消费者呼叫
public synchronized int getProduct() {
if (this.product == -1) {
try {
super.wait();
}catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.printf("消费者取走 (%d)%n",P);
this.product = -1;
super.notify();
return this.product;
}
(二)实验总结
1.模拟三个老师同时分发80分作业,每个老师相当于一个线程。
2.模拟一个银行存款的程序。假设有两个储户都去银行往同一个账户进行存款,一次存100,每人存三次。要求储户每存一次钱,账户余额增加100,并在控制台输出当前账户的余额。
(三)代码提交
https://git.oschina.net/wangyikai1996/shiyan10.git
1080047-20170603114301664-1142734065.png

转载于:https://www.cnblogs.com/494625951-wangyikai/p/6936821.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值