/*假设抽奖箱中有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;
}
} |
|