Java线程通信基础问题的解决方式

文章介绍了线程的五个生命周期阶段,并通过两个示例解释线程通信的关键方法wait、notify和notifyAll的使用。例题1展示了如何用两个线程交替打印1-100,例题2则通过生产者、店员和消费者的角色模拟了经典的生产者消费者问题,强调了同步和资源管理的重要性。
摘要由CSDN通过智能技术生成

了解线程通信我们可以先去了解一下线程的生命周期

线程的生命周期

 1.新建:当一个Thread类或器子类的对象呗创建的时候,新生的线程对象处于新建状态

 2.就绪:出于新建状态被start()后,将进入线程队列等待分配cpu的资源

 3.运行:当就绪的程序被调度并获得cpu的资源时,并进入到运行状态,run()定义了线程的操作和功能

 4.阻塞:在耨中特殊情况下,被人为挂起或执行并输入输出操作是,让出cpu并临时中止自己的执行,进入阻塞状态

 5.死亡:线程完成了他的全部工作或线程被提前强制性中止或出现异常导致结束

例题1:使用两个线程打印1-100,这两个线程要交替打印

 涉及到三个方法:  

wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器

notify():一旦执行此方法,就会唤醒被wait的一个线程,如果有多个被wait,则唤醒优先级高的

notifyAll():一旦执行此方法,就会唤醒全部被wait的线程

 说明:1.该三个方法只能在同步代码块中或同步方法使用

         2.这三个方法必须是同步代码块中或同步方法中的同一个同步监视器 *

         3.这三个方法是定义在Object中的

代码实现

 

 

例题2: 生产者将产品交个店员,而消费者从店员这里取走产品, 店员一次只能持有固顶数量(20)的产品,如果生产者试图生产更多的产品,店员会  叫生产者停一下,如果店里有空位,则再通知生产,如果店里没有产品,店员会 叫消费者等一下,有产品了在通知消费者来取产品

product(生产者)
 Clerk(店员)
 Customer(消费者)

代码实现

 

 然后在Clerk类里实现生成,和消费的两个方法

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值