黑马程序员技术交流社区
标题:
多线程开数组怎么开 求大神 解答题目
[打印本页]
作者:
某某帅
时间:
2016-9-29 21:40
标题:
多线程开数组怎么开 求大神 解答题目
6、有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300};
创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,随机从arr数组中获取奖项元素并打印在控制台上,格式如下:
抽奖箱1 又产生了一个 10 元大奖
抽奖箱2 又产生了一个 100 元大奖
数组的 每一个数字只能出现一次
作者:
kaka3208c
时间:
2016-10-8 18:44
package com.heima.multithreading;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test013 {
/*
* 有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300};
创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,随机从arr数组中获取奖项元素并打印在控制台上,格式如下:
抽奖箱1 又产生了一个 10 元大奖
抽奖箱2 又产生了一个 100 元大奖
数组的 每一个数字只能出现一次
*/
public static void main(String[] args) {
Lottery ly = new Lottery();
Thread t1 = new Thread(ly);
Thread t2 = new Thread(ly);
t1.setName("抽奖箱1");
t2.setName("抽奖箱2");
t1.start();
t2.start();
}
}
class Lottery implements Runnable {
List<Integer> list = getList();
@Override
public void run() {
while(true){
synchronized (this) {
if(list.size() > 0){
System.out.println(Thread.currentThread().getName() + "又产生了一个 " + list.get(0) + " 元大奖 ");
list.remove(0);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
break;
}
}
}
}
private List<Integer> getList() {
int[] arr = {10,5,20,50,100,200,500,800,2,80,300};
List<Integer> list = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
list.add(arr[i]);
}
Collections.shuffle(list);
return list;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2