黑马程序员技术交流社区
标题:
求多线程大神来解答题目
[打印本页]
作者:
请叫我廖小帅
时间:
2016-10-20 20:47
标题:
求多线程大神来解答题目
创建一个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分)
作者:
betray
时间:
2016-10-20 21:48
多线程,东西多,不好理解啊,只能多练习了!
作者:
蓝光四号
时间:
2016-10-20 21:56
还没学 mark
作者:
kaka3208c
时间:
2016-10-20 22:58
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;
}
}
作者:
饭要大口吃
时间:
2016-10-20 22:58
本帖最后由 饭要大口吃 于 2016-10-20 23:07 编辑
。。 。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2