public class Test6{
/**
* 创建一个Bank银行类,属性有money(初始值为100),生成set/get方法,创建一个Bank银行对象,创建三个线程(分别给线程命名为
* "用户A","用户B","用户C")(4分) 当用户A线程执行时,通过set方法将money的值增加100,在控制台输出
* "用户A线程正在执行第X次,增加了100元,目前money的值为X元" (2分)
* 当用户B线程执行时,通过set方法将money值随机增加1-100
* (不含100),在控制台输出"用户B线程正在执行第X次,增加了X元,目前money的值为X元" (2分)
* 当用户C线程执行时,线程休眠10毫秒,不作任何操作.在控制台输出"用户C线程正在执行第X次,睡眠了10毫秒"(2分)
* 共执行20次,最后打印输出money的值,如 "增加后的money值为:X元"(2分)
*
* @author purity 2016-10-20下午6:57:32 7:15
*/
public static void main(String[] args) {
StoreMoney s = new StoreMoney();
new Thread(s, "用户A").start();
new Thread(s, "用户B").start();
new Thread(s, "用户C").start();
}
}
class Bank1 {
private int money;
public Bank1() {
this.money = 100;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money += money;
}
}
class StoreMoney extends Bank1 implements Runnable {
int times = 0;
@Override
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (StoreMoney.class) {
String name = Thread.currentThread().getName();
times++;
if (times > 20) {
break;
}
if (name.equals("用户A")) {
super.setMoney(100);
System.out.println(name + "线程正在执行第" + times + "次,增加了100元,目前money的值为" + super.getMoney() + "元");
} else if (name.equals("用户B")) {
int _money = (int) (Math.random() * 100 + 1);
super.setMoney(_money);
System.out.println(name + "线程正在执行第" + times + "次,增加了" + _money + "元,目前money的值为" + super.getMoney()
+ "元");
} else if (name.equals("用户C")) {
try {
Thread.sleep(10);
System.out.println(name + "线程正在执行第" + times + "次,睡眠了10毫秒");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (times == 20) {
System.out.println("增加后的money值为:" + super.getMoney() + "元");
}
}
}
}
}
|