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

© 丶唯萌Pro 中级黑马   /  2017-10-21 22:07  /  997 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[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();
	}

}

4 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
丶唯萌Pro 来自手机 中级黑马 2017-10-21 23:51:22
板凳
wheat 发表于 2017-10-21 22:42
线程必考题

师哥好!
回复 使用道具 举报
丶唯萌Pro 来自手机 中级黑马 2017-10-21 23:52:29
报纸
fashionkillyou 发表于 2017-10-21 23:08
加油加油

明哥,一起加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马