package cn.itcast.test;
import java.util.Random;
public class Test016 {
/**
* @param args
*
创建一个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分)
*/
public static void main(String[] args) {
Bank bk = new Bank();
new Thread(bk,"A").start();
new Thread(bk,"B").start();
new Thread(bk,"C").start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(bk.getMoney());
}
}
class Bank implements Runnable{
private static int money = 100;
private static int count = 20;
private static int i = 0;
private static int j = 0;
private static int k = 0;
Random rd = new Random();
@Override
public void run() {
while (true){
synchronized (this) {
if(count-- > 0){
if("A".equals(Thread.currentThread().getName())){
money += 100;
System.out.println("用户"+ Thread.currentThread().getName() + "线程正在执行第" + ++i + "次,增加了100元,目前money的值为" + money + "元");
}else if("B".equals(Thread.currentThread().getName())) {
int number = rd.nextInt(100) + 1;
money = money + number;
System.out.println("用户"+ Thread.currentThread().getName() + "线程正在执行第" + ++j + "次,增加了" + number + "元,目前money的值为" + money + "元");
}else{
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("用户"+ Thread.currentThread().getName() + "线程正在执行第" + ++k + "次,睡眠了10毫秒");
}
}else{
break;
}
}
}
}
public static int getMoney() {
return money;
}
} |