A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yu244934256 中级黑马   /  2016-9-22 00:26  /  1146 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

创建一个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"

2 个回复

倒序浏览
[AppleScript] 纯文本查看 复制代码
	public static void main(String[] args) {
		StoreMoney t = new StoreMoney();
		new Thread(t, "用户A").start();
		new Thread(t, "用户B").start();
		new Thread(t, "用户C").start();
	}
}

class Bank {
	
	private int money;
	
	public Bank(){
		this.money=100;
	}
	

	public void setMoney(int money) {
		this.money += money;
	}

	public int getMoney() {
		return money;
	}
}

class StoreMoney extends Bank implements Runnable {
	boolean flag = false;
	private int i = 0;
	
	@Override
	public void run() {
		while (true) {
			try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized (this) {
				if (i < 20) {
					i++;
					if (Thread.currentThread().getName().equals("用户A")) {
						super.setMoney(100);
						System.out.println(Thread.currentThread().getName()
								+ "线程正在执行第" + i + "次,增加了100元,目前money的值为"
								+ super.getMoney() + "元");
					} else if (Thread.currentThread().getName().equals("用户B")) {
						int temp = (int) (Math.random() * 100 + 1);
						super.setMoney(temp);
						System.out.println(Thread.currentThread().getName()
								+ "线程正在执行第" + i + "次,增加了" + temp
								+ "元,目前money的值为" + super.getMoney() + "元");
					} else if (Thread.currentThread().getName().equals("用户C")) {
						try {
							Thread.sleep(10);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						System.out.println(Thread.currentThread().getName()
								+ "线程正在执行第" + i + "次,睡眠了10毫秒");
					}

					if (i == 20) {
						flag = true;
					}

				} else {
					if (flag)
						System.out.println("增加后的money值为:" + super.getMoney());
					flag = false;
					break;
				}
			}
		}
	}

回复 使用道具 举报
怎么目前money的值没有累加起来呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马