黑马程序员技术交流社区

标题: 老师说~这题会考到... [打印本页]

作者: 丶唯萌Pro    时间: 2017-10-21 22:07
标题: 老师说~这题会考到...
[Java] 纯文本查看 复制代码
import java.util.ArrayList;
import java.util.Collections;
//抽奖池,实现runnable接口
public class LotterDraw1 implements Runnable{
        //创建一个集合,盛放所有的奖项。
        private static ArrayList<Integer> award;
        //创建一个集合存放抽到的奖项
        private ArrayList<Integer> getAward = new ArrayList<Integer>();
        //静态代码块,随着类的加载而加载,且只加载一次。
        static {
                award = new ArrayList<Integer>();
                award.add(10);
                award.add(5);
                award.add(20);
                award.add(100);
                award.add(200);
                award.add(500);
                award.add(800);
                award.add(2);
                award.add(80);
                award.add(300);
                award.add(700);
               
        }
        @Override
        public void run() {
                //编写抽奖的逻辑
                while(true) {
                        synchronized (LotterDraw1.class) {
                                if(award.size()>0) {
                                        try {
                                                Thread.sleep(30);
                                        } catch (InterruptedException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                        }
                                        //首先打乱奖项的顺序
                                        Collections.shuffle(award);
                                        //每次都去取集合中第一个元素放入两个不同奖箱中
                                        getAward.add(award.get(0));
                                        //将取到的奖项移除掉
                                        award.remove(0);
                                }else {
                                        int max = getAward.get(0);
                                        int size = getAward.size();
                                        int sum =0;
                                        StringBuilder sb = new StringBuilder();
                                                for (int i=0;i<getAward.size();i++) {
                                                        if(getAward.get(i)>max) {
                                                                max = getAward.get(i);
                                                        }
                                                        sum+=getAward.get(i);
                                                        if(i == getAward.size()-1) {
                                                                sb.append(getAward.get(i));
                                                        }else {
                                                                sb.append(getAward.get(i)).append(",");
                                                        }
                                                }
                                        System.out.println("在此次抽奖过程中,"+Thread.currentThread().getName()+"总共产生了"+size+"个奖项,分别为:"+sb+"最高奖项为"+max+"元,总计额为"+sum+"元");
                                        break;
                                }
                        }
                }
               
        }

}

public class Test04_1 {
        public static void main(String[] args) {
                /*
                 * 创建LotterDraw对象
                 * 为什么要创建两个实现类对象?
                 * 因为抽到的奖项是放到各自的 奖箱中盛放,所以要创建两个集合去分别盛放。
                 * 也就是每次创建对象都会创建一次集合。
                 * 如果只创建一个对象,那么创建的是同一个集合,遍历的也是同一个集合
                 */
                LotterDraw1 lotterDraw = new LotterDraw1();
                LotterDraw1 lotterDraw2 = new LotterDraw1();
                //创建线程
                Thread t1 = new Thread(lotterDraw);
                t1.setName("抽奖箱1");
                t1.start();
                Thread t2 = new Thread(lotterDraw2);
                t2.setName("抽奖箱2");
                t2.start();
        }

}


作者: wheat    时间: 2017-10-21 22:42
线程必考题

作者: fashionkillyou    时间: 2017-10-21 23:08
加油加油

作者: 丶唯萌Pro    时间: 2017-10-21 23:51
wheat 发表于 2017-10-21 22:42
线程必考题

师哥好!
作者: 丶唯萌Pro    时间: 2017-10-21 23:52
fashionkillyou 发表于 2017-10-21 23:08
加油加油

明哥,一起加油!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2