MultiProcessingExercise6
java">package MultiProcessingExercise620240813;import java.util.ArrayList;
import java.util.Collections;public class MultiProcessingExercise6 {public static void main(String[] args) {// 需求:// 每次抽的过程中,不打印,抽完时一次性打印(随机)// 在此次抽奖过程中,抽奖箱1总共产生了6个奖项。// 分别为:10,20,100,500,2,300最高奖项为300元,总计额为932元// 在此次抽奖过程中,抽奖箱2总共产生了6个奖项。// 分别为:5,50,200,800,80,700最高奖项为800元,总计额为1835元ArrayList<Integer> pool = new ArrayList<>();// 加入无奖for (int i = 0; i < 500; i++) {pool.add(0);}// 加入奖项Collections.addAll(pool, 10,5,20,50,100,200,500,800,2,80,300,700);Lottery lottery = new Lottery(pool);Thread thread1 = new Thread(lottery, "抽奖箱1");Thread thread2 = new Thread(lottery, "抽奖箱2");thread1.setPriority(5);thread2.setPriority(6);thread1.start();thread2.start();}
}
Lottery
java">package MultiProcessingExercise620240813;import java.util.ArrayList;
import java.util.Collections;
import java.util.concurrent.locks.ReentrantLock;public class Lottery implements Runnable {private ArrayList<Integer> pool;public Lottery(ArrayList<Integer> pool) {this.pool = pool;}private final ReentrantLock lock = new ReentrantLock();private ArrayList<Integer> list1 = new ArrayList<>();private ArrayList<Integer> list2 = new ArrayList<>();@Overridepublic void run() {while (true) {lock.lock();if (pool.isEmpty()) {// 此时抽奖箱已经空了,停止抽奖,开始输出每个抽奖箱的结果if ("抽奖箱1".equals(Thread.currentThread().getName())) {System.out.println("抽奖箱1:" + list1);} else {System.out.println("抽奖箱2:" + list2);}lock.unlock();break;} else {// 此时抽奖箱不空,继续抽奖try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}try {Collections.shuffle(pool);int prize = pool.removeFirst();if ("抽奖箱1".equals(Thread.currentThread().getName())) {if (prize != 0) {list1.add(prize);}} else {if (prize != 0) {list2.add(prize);}}} finally {lock.unlock();}}}}
}