线程通信、线程池

1.线程通信

生产者—>数据缓存—>消费者

这是要给线程同步问题,生产者和消费者共享同一个资源,并且生产者和消费者相互依赖,互为条件

在生产者消费者问题中,仅有synchronized是不够的

synchronized可阻止并发更新同一个共享资源,实现了同步

synchronized不能用来实现不同线程之间的消息传递(通信)

Java提供了几个方法解决线程之间的通信问题:

  • wait()--------表示线程一直等待,直到其他线程来通知,与sleep不同,会释放锁
  • wait(long timeout)--------等待的毫秒数
  • notify()---------唤醒一个处于等待状态的线程
  • notifyAll()----------唤醒同一个对象上所有调用wait方法的线程,优先级高的线程优先调度

方法一:

并发协作模型车“生产者/消费者模式”—->管线法

生产者:负责生产数据模块(可能是方法,对象,线程,进程)

消费者:负责处理数据模块(可能是方法,对象,线程,进程)

缓冲区:消费者不能直接使用生产者的数据,他们之间有个缓冲区

生产者将生产好的数据放入缓冲区,消费者冲缓冲区拿出数据

前后台生产炸鸡例子

 

 执行结果:

 方法二:

并发协作模型“生产者/消费者模式”——>信号灯法

定义一个boolea类型数据,用作标识,判断完以后反过来,用其判断什么时候等待、监听和唤醒

 

 ​​​​​​

 

 执行结果:

 2.线程池

  • 背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。
  • 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中,可以避免频繁创建销毁、实现充分利用。类似生活中的公共交通工具。
  • 优点:

    提高相应速度(减少了创建新线程的时间)

    降低资源消耗(重复利用线程池中的线程,不需要每次都创建)

    便于线程管理

 执行结果:

 PS:完结散花!!!

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值