多线程(五)Guarded+Blocks--这真的是非常非常重要的知识点

本文介绍了多线程编程中的关键概念——Guarded Blocks,以及其在Producer-Consumer结构中的应用。通过一个文件上传到FTP服务器的例子,解释了如何协调生产者和消费者线程,确保数据的正确共享。文中强调了使用synchronized关键字的原因,并提供了一个简单的多线程文件上传示例,展示了如何避免并发问题。
摘要由CSDN通过智能技术生成

今天来看一个对于多线程来说非常重要,实用的应用:在producer-consumer结构中使用的Guarded Blocks

链接是:http://download.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html

producer-consumer

在进行多线程编程时使用的最多的结构是什么呢?那就是producer-consumer结构,即一个或多个线程produce一个资源,而一个或多个线程消费这个资源。

从后面的FTP传输文件的例子能够很好的理解这种结构,我们姑且继续往下讲。

Guarded Blocks

指当满足一定条件后才会执行的一段代码。

public void guardedJoy(){
    while(!joy) {}//简单的loop guard. 它会浪费处理器时间,所以不要这么做!
    System.out.println("Joy has been achieved!");
}

在上例中,只有当joy=false时,才会跳出while循环,之后才会执行打印语句。while(!joy){}就是一个Guarded Blocks。

这种应用在程序中比比皆是,但是放在多线程中就引入了更复杂的问题:等待的对象是由其他进程提供的(即有多个线程消费这个资源)。

原文中提到了,while(!joy)会消耗cpu资源,不是一个好的结构。更好的方法是调用Object.wait to suspend the current thread (这样在等待时,就不会消耗任何资源。直到有其他线程将该线程唤醒).  The invocation of wait does not return until another thread has issued a notification tha

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值