黑马程序员技术交流社区
标题:
线程题
[打印本页]
作者:
UZI
时间:
2016-10-29 00:28
标题:
线程题
题目三: (共12分)
创建一个Bank银行类,属性有money(初始值为100),生成set/get方法,
创建一个Bank银行对象,创建三个线程(分别给线程命名为"用户A","用户B","用户C")
*当用户A线程执行时,通过set方法将money的值增加100,在控制台输出 "用户A线程正在执行第X次,增加了100元,目前money的值为X元"
*当用户B线程执行时,通过set方法将money值随机增加1-100(不含100),
*在控制台输出"用户B线程正在执行第X次,增加了X元,目前money的值为X元"
* *当用户C线程执行时,线程休眠10毫秒,不作任何操作.在控制台输出"用户C线程正在执行第X次,睡眠了10毫秒"
*共执行20次,最后打印输出money的值,如 "增加后的money值为:X元"
* *注意:(机子速度太快有可能会出现一条线程全执行完没关系,关键要实现需求)
class PersonThread extends Thread{
public static int count = 1;
private static Bank b = new Bank();
public PersonThread(String name) {
super(name);
}
@Override
public void run() {
while (true) {
synchronized (PersonThread.class) {
if (count > 20) {
break;
}
if ("用户A".equals(getName())) {
b.setMoney(b.getMoney() + 100);
System.out.println(getName()+"线程正在执行第"+count+"次,增加了100元,目前money的值为"+b.getMoney()+"元");
}else if ("用户B".equals(getName())) {
Random r = new Random();
int num = r.nextInt(99)+1;
b.setMoney(b.getMoney() + num);
System.out.println(getName()+"线程正在执行第"+count+"次,增加了"+num+"元,目前money的值为"+b.getMoney()+"元");
}else {
try {
Thread.sleep(10);
System.out.println("用户C线程正在执行第"+count+"次,睡眠了10毫秒");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (count == 20) {
System.out.println("增加后的金额为: " + b.getMoney());
}
count++;
}
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2