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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 叫我宁采臣 中级黑马   /  2016-9-30 15:41  /  804 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

假设抽奖箱中有100个号码(依次从1到100),开启两个线程,共随机抽选出10个号码,并在控制台上打印出两个线程分别抽选了哪些号码
         *
         * 提示(两个人线程不能抽取同一个号码,已经抽取的号码不能再次抽取;不限定两个线程抽取的个数一样,
         *      总共抽选10个即可,线程名自定义)



3 个回复

倒序浏览
求代码
回复 使用道具 举报

/*假设抽奖箱中有100个号码(依次从1到100),开启两个线程,共随机抽选出10个号码,并在控制台上打印出两个线程分别抽选了哪些号码
*
* 提示(两个人线程不能抽取同一个号码,已经抽取的号码不能再次抽取;不限定两个线程抽取的个数一样,
*      总共抽选10个即可,线程名自定义)
*      抽奖号码:
*      耗时: 20分钟  微信:18665996821
*      状态:一般
*      思路分析: 时间3分钟
*      1.先把100个号码,存到List集合中
*      2.把这个集合设置为静态,并放在构造方法中
*      3.并对这个集合进行洗牌
*      4.创建一个类,继承Thread类
*      5.实现run方法
*      6.主方法中新建两个线程并启动
*      
*      
* */
public class 多线程_100手机号 {
        public static void main(String[] args) {
          MyThread mt1 = new MyThread();
          MyThread mt2 = new MyThread();
            mt1.setName("张三");
            mt2.setName("李四");
            mt1.start();
            mt2.start();
         
         
        }
}
class MyThread extends Thread{
        private static int num=10;
        private static int total=100;
        static List<Integer> list1=getNum();
        static List  list2=new ArrayList<>();
        static List  list3=new ArrayList<>();
       
        public void run(){
                int count=0;
                while(true){
                        synchronized(Thread.class){
                                if(num<=0){
                                        break;
                                }
                                count++;
                                System.out.println(list1.size()+"------------");
                                if(Thread.currentThread().getName().equals("张三")){
                                        list2.add(list1.get(0));
                                }else{
                                        list3.add(list1.get(0));
                                }
                                System.out.println(Thread.currentThread().getName()+"卖出第"+count+"票,票号为:"+list1.get(0));
                                num--;
                                list1.remove(0);
                        }
                }
                if(Thread.currentThread().getName().equals("张三")){
               
                        System.out.println(Thread.currentThread().getName()+"共抽出了"+count+"张号码:"+list2.toString());
                }else{
                        System.out.println(Thread.currentThread().getName()+"共抽出了"+count+"张号码:"+list3.toString());
                }
        }
       
       
       
       
       
        public static List<Integer> getNum(){
                List<Integer> list = new ArrayList<>();
                for (int i = 1; i <=total; i++) {
                        list.add(i);
                }
         Collections.shuffle(list);
                return list;
        }
}
给点黑马币吧
回复 使用道具 举报 2 0
1.随机10个1到100之间不重复的数放在数组中
2.再定义2个数组分别存2个线程执行到的数
3.加锁循环10次
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马