Java 多线程编程之六:线程之间的通信(附源代码)

本文通过代码示例详细解释了Java中的线程通信,特别是如何使用wait、notify和notifyAll方法。通过一个经典的生产者消费者模型,展示了如何在实际编程中应用这些概念,帮助读者更好地理解和掌握多线程中的线程同步与通信技巧。
摘要由CSDN通过智能技术生成

Java 多线程编程之六:线程之间的通信(附源代码)

源代码下载

       多线程编程中,线程之间的通信是一个比较复杂的问题。大家往往搞不懂什么是竞争资源?什么时候考虑同步?怎么进行同步?什么是线程通信?怎么进行通信?很多朋友面试的时候都遇到过这样类似的一个编程题:给定一个场景,编写代码来恰当使用等待、通知和通知所有线程。相信很多朋友对java.lang.Object类的这三个方法都很熟悉,notify、notifyAll、wait,但是真正能运用自如的却不多。因此面试中挂在上面那个面试题上的朋友还真不在少数。本文列举了一个经典的生产者、消费者源代码,以代码的角度来说明这个问题,并附加示例源代码,相信读者看过之后对线程之间的通信交互会有更进一步的认识!
        生产者-消费者模型,堪称多线程程序中的经典。本源码中将使用 java.lang.Object 的 wait、notify、notifyAll 来实现这个模型,这才是最重要的。
        开始以前,让我们先来熟悉一下生产者-消费者模型的游戏规则:
1、仓满不能生产;
2、藏空不能消费;
3、消费者消费产品前发现不能满足此次消费后通知生产者进行生产;
4、生产者生产出产品后通知消费者进行消费。

        好的。开始之前再来回顾一下对象锁的概念……这是最关键的。每个对象都有一个内置锁。当程序运行到非静态 synchronized 方法上时,将自动获得与正在执行代码类的当前实例(即 this 实例)有关的锁。java.lang.Thread.sleep() 方法执行时并不释放此锁;java.lang.Object.wait() 方法执行时释放此锁。好了,就到这里吧,说太多了一来显得作者罗嗦,二来也有侮辱读者 Java 基础的嫌疑。开始代码演示。
生产者-消费者模型-仓库源代码

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值