生产者消费者模式的三种写法(面试题常考)

本文介绍了生产者消费者模式在Java多线程中的三种实现方式,包括synchronized版本、ReentrantLock配合单个Condition以及如何使用多个Condition实现精准通知。这些内容常见于面试手撕代码题中,对于理解和掌握多线程编程至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们通常在面试中大量遇到的手撕代码的题无非就是以下几种:
死锁,几种排序算法(最常考的快速排序,归并排序),生产者消费者模式,单例模式
在多线程这边,我们通常需要掌握生产者消费者模式,生产者消费者模式我们可以用sychronized版本写,更加高阶的可以用Reentranlock版本+condition(条件变量)来写。
为了达到精准通知的目的,我们还可以使用ReentrantLock版本+多个condition(条件变量来写)。

sychronized版本:

public class Demo01 {
   
	public static void main(String[] args) {
   
		
		Data data = new Data();
		
		new Thread(()->{
   
			for(int i =0;i<10;i++) {
   
				try {
   
					data.increment();
				} catch (InterruptedException e) {
   
					e.printStackTrace();
				}
			}
		},"线程A").start(); 
		
		new Thread(()->{
   
			for(int i =0;i<10;i++) {
   
				try {
   
					data.decrement();
				} catch (InterruptedException e) {
   
					e.printStackTrace();
				}
			}
		},"线程B").start(); 
		new Thread(()->{
   
			for(int i =0;i<10;i++) {
   
				try {
   
					data.increment();
				} catch (InterruptedException e) {
   
					e.printStackTrace();
				}
			}
		},"线程C").start(); 
		new Thread(()->{
   
			for(int i =0;i<10;i++) {
   
				try {
   
					data.decrement();
				} catch (InterruptedException e) {
   
					e.printStackTrace();
				
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值