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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© veritas.lyj 中级黑马   /  2016-11-3 17:34  /  915 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

定义一个数组 { "橘子", "桃子", "李子", "榴莲", "香蕉", "樱桃" }
        * 分三条线程abc去随机抢水果;抢到的水果不能重复
        * 抢完水果后打印谁抢了多少个
        *  A抢到李子
                A抢到榴莲
                B抢到香蕉
                C抢到樱桃
                B抢到橘子
                A抢到桃子
                A抢了3个
                B抢了2个
                C抢了1个*/

2 个回复

倒序浏览
在run()方法中遍历数组,输出打印语句,在主方法中创建三条线程,即可
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
[Java] 纯文本查看 复制代码
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Test01 {

	/**
	 * 定义一个数组 { "橘子", "桃子", "李子", "榴莲", "香蕉", "樱桃" }
        * 分三条线程abc去随机抢水果;抢到的水果不能重复
        * 抢完水果后打印谁抢了多少个
	 * @param args
	 */
	public static void main(String[] args) {
		String[] arr = {"橘子", "桃", "李子", "榴莲", "香蕉", "樱桃"};
		MyRunnable mr = new MyRunnable(arr);
		Thread t1 = new Thread(mr, "A");
		Thread t2 = new Thread(mr, "B");
		Thread t3 = new Thread(mr, "C");
		
		t1.start();
		t2.start();
		t3.start();
	}
}

class MyRunnable implements Runnable {
	private int count = 0;
	private List<String> list;
	private String[] arr;
	private Random rd;
	private int countA = 0;
	private int countB = 0;
	private boolean flag = true;
	public MyRunnable(String[] arr) {
		super();
		list = new ArrayList<String>();
		for (String string : arr) {
			list.add(string);
		}
		this.arr = arr;
		rd = new Random();
	}

	@Override
	public void run() {
		while(true){
			try {
				Thread.sleep(30);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized(this) {
				if (count >= arr.length) {
					break;
				}
				String name = Thread.currentThread().getName();
				if ("A".equals(name)) {
					countA ++;
				} else if ("B".equals(name)) {
					countB++;
				}
				int index = rd.nextInt(list.size());
				System.out.println(name + "获取到了" + list.get(index));
				list.remove(index);
			}
			count++;
		}
		synchronized (this) {
			if (flag) {
				System.out.println("A一共获取到了" + countA + "个");
				System.out.println("B一共获取到了" + countB + "个");
				System.out.println("C一共获取到了" + (count-countA-countB) + "个");
				flag  = false;
			}
		}
	}
}

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马