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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 欧胤祥 中级黑马   /  2016-7-8 23:27  /  1126 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.ArrayList;
import java.util.Random;


public class text10 {


        /**
         * test63-2.某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程
         * , 并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下: 编号为: 2 的员工 从后门 入场!
         * 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07] 编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是:
         * [06, 11, 14, 22, 29, 32, 15] //..... 从后门入场的员工总共: 13 位员工 从前门入场的员工总共: 87
         * 位员工
         */
        public static void main(String[] args) {
                final MyRunable m = new MyRunable();
                new Thread("前门") {
                        public void run() {
                               
                                        try {
                                                m.print1();
                                        } catch (InterruptedException e) {
                                               
                                                e.printStackTrace();
                                        }
                               
                        };
                }.start();


                new Thread("后门") {
                        public void run() {


                                try {
                                        m.print2();
                                } catch (InterruptedException e) {


                                        e.printStackTrace();
                                }


                        };
                }.start();
        }
}


class MyRunable {
        Random r = new Random();
        public static int a = 1, b = 1, c = 14, d = 0;


        public void print1() throws InterruptedException {
                synchronized (this) {


                        while (a <= 100) {
                                        ArrayList<Integer> list = new ArrayList<Integer>();
                                        while (list.size() < 7) {
                                                list.add(r.nextInt(32) + 1);
                                        }
        System.out.println("编号为: " + a++ + " 的员工 从"+ Thread.currentThread().getName()+ " 入场! 拿到的双色球彩票号码是: " + list + " " + c++);
                                }
                        }
                }


        public void print2() throws InterruptedException {
                synchronized (this) {


                        while (a <= 100) {
                                if (b < 14) {
                                        ArrayList<Integer> list = new ArrayList<Integer>();
                                        while (list.size() < 7) {
                                                list.add(r.nextInt(32) + 1);
                                        }
        System.out.println("编号为: " + a++ + " 的员工 从"+ Thread.currentThread().getName()+ "入场! 拿到的双色球彩票号码是: " + list + "......" + b++);
                                       
                                }
                        }
                }
        }
}

1 个回复

倒序浏览
案例很经典,值得学习的很
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马