面试题:实现一个多生产者多消费者模型
记录一下笔面试中出现的比较简单却又带来了很大麻烦的一些题目。
题目:实现一个多生产者多消费者模型
来源:字节跳动后端开发二面
java代码实现
import java.util.ArrayList; import java.util.List; /** * @Description 面试题:实现一个多生产者多消费者模型 * @Author shendongjian * @CreateTime 2019/7/24 11:03 */ public class ProducerCustomer { private static final Object lock = new Object(); private static List<Integer> resources = new ArrayList<>(1); private static int time = 0; public static void main(String[] args){ for(int i = 0; i < 3; i++){ new Thread(()->{ while(time < 20){ if(resources.isEmpty()){ synchronized (lock){ try { if(resources.isEmpty()){ int value = (int) (Math.random()*100); resources.add(value); System.out.println(Thread.currentThread().getName()+"生产了:"+value); time++; }else{ lock.wait(); } }catch (Exception e){ e.printStackTrace(); }finally { lock.notifyAll(); } } } } }).start(); new Thread(()->{ while(time < 20){ if(!resources.isEmpty()){ synchronized (lock){ try { if(!resources.isEmpty()){ int value = resources.get(0); resources.remove(0); System.out.println(Thread.currentThread().getName()+"消费了:"+value); time++; }else{ lock.wait(); } }catch (Exception e){ e.printStackTrace(); }finally { lock.notifyAll(); } } } } }).start(); } } }
运行效果如图
代码有很大的优化和精简的空间,但是由于时间问题
(不,我是懒)在此不做深入研究