首页 文章 精选 留言 我的
优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/u/4160637/blog/4773322

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

Java多线程中的虚假唤醒和如何避免

先来看一个例子 一个卖面的面馆,有一个做面的厨师和一个吃面的食客,需要保证,厨师做一碗面,食客吃一碗面,不能一次性多做几碗面,更不能没有面的时候吃面;按照上述操作,进行十轮做面吃面的操作。 用代码说话 首先我们需要有一个资源类,里面包含面的数量,做面操作,吃面操作; 当面的数量为0时,厨师才做面,做完面,需要唤醒等待的食客,否则厨师需要等待食客吃完面才能做面; 当面的数量不为0时,食客才能吃面,吃完面需要唤醒正在等待的厨师,否则食客需要等待厨师做完面才能吃面; 然后在主类中,我们创建一个厨师线程进行10次做面,一个食客线程进行10次吃面; 代码如下: package com.duoxiancheng.code; /** * @user: code随笔 */ class Noodles{ //面的数量 private int num = 0; //做面方法 public synchronized void makeNoodles() throws InterruptedException { //如果面的数量不为0,则等待食客吃完面再做面 if(num != 0){ this.wait(...

协程中的取消和异常 | 取消操作详解

在日常的开发中,我们都知道应该避免不必要的任务处理来节省设备的内存空间和电量的使用——这一原则在协程中同样适用。您需要控制好协程的生命周期,在不需要使用的时候将它取消,这也是结构化并发所倡导的,继续阅读本文来了解有关协程取消的来龙去脉。 ⚠️ 为了能够更好地理解本文所讲的内容,建议您首先阅读本系列中的第一篇文章:协程中的取消和异常 | 核心概念介绍。 调用 cancel 方法 当启动多个协程时,无论是追踪协程状态,还是单独取消各个协程,都是件让人头疼的事情。不过,我们可以通过直接取消协程启动所涉及的整个作用域 (scope) 来解决这个问题,因为这样可以取消所有已创建的子协程。 // 假设我们已经定义了一个作用域 val job1 = scope.launch { … } val job2 = scope.launch { … } scope.cancel() 取消作用域会取消它的子协程 有时候,您也许仅仅需要取消其中某一个协程,比如用户输入了某个事件,作为回应要取消某个进行中的任务。如下代码所示,调用 job1.cancel 会确保只会取消跟 job1 相关的特定协程,而不会影响其余...

相关文章

发表评论

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册