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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

4 个回复

正序浏览
本帖最后由 饭要大口吃 于 2016-10-20 23:07 编辑

  。。 。。
回复 使用道具 举报
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;
        }
       
}
回复 使用道具 举报
还没学   mark
回复 使用道具 举报
多线程,东西多,不好理解啊,只能多练习了!
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马