黑马程序员技术交流社区

标题: 求多线程大神来解答题目 [打印本页]

作者: 请叫我廖小帅    时间: 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