黑马程序员技术交流社区
标题:
下面这道题怎么做啊
[打印本页]
作者:
张镓仁1
时间:
2016-10-24 23:26
标题:
下面这道题怎么做啊
3.有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300};
创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,随机从arr数组中获取奖项元素并打印在控制台上,格式如下:
抽奖箱1 又产生了一个 10 元大奖
抽奖箱2 又产生了一个 100 元大奖 3.有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300}; 创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,随机从arr数组中获取奖项元素并打印在控制台上,格式如下: 抽奖箱1 又产生了一个 10 元大奖 抽奖箱2 又产生了一个 100 元大奖
作者:
javaee9527
时间:
2016-10-25 23:02
上次写另一题的代码,改一下就可以用了
import java.util.*;
class DualArr{
public static void main(String[] args)throws Exception{
int[] arr = new int[6];
new Thread(new SynArr(arr)).start(); //传入共享数组,开启线程
new Thread(new SynArr(arr)).start();
Thread.sleep(5000); //主线程等待,让数据完全录入
System.out.println(Arrays.toString(arr));
}
}
class SynArr implements Runnable{
int[] arr; //将共享数组定义成属性
public SynArr(int[] arr){
this.arr = arr;
}
public synchronized void run(){
try{
for(int i=0;i<3;i++){
int time = (int) (Math.random()*1000); //生成随机毫秒数
Thread.sleep(time); //让线程等待,等待时间为上面的随机数
System.out.println(Thread.currentThread().getName());//输出当前活动的线程名
synchronized(DualArr.class){
putArr(i, time); //将随机数存入数组i号位
}
}
}catch(Exception e){
System.out.println(e);
}
}
public void putArr(int i, int value){
if(arr[i]==0) //如果i号位已经有元素则存入其下一位
arr[i] = value;
else
putArr(i+1, value);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2