返回顶部
首页 > 资讯 > 精选 >如何使用wait() 和notify() 机制来完成睡眠和踢
  • 578
分享到

如何使用wait() 和notify() 机制来完成睡眠和踢

2023-06-03 05:06:41 578人浏览 薄情痞子
摘要

今天就跟大家聊聊有关如何使用wait() 和notify() 机制来完成睡眠和踢,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。使用 wait() 和 notify() 机制来完成“睡

今天就跟大家聊聊有关如何使用wait() 和notify() 机制来完成睡眠和踢,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

使用 wait() 和 notify() 机制来完成“睡眠”和“踢”。实际的消费者工作由 OnConsume(Object) 方法处理,如清单 3 所示:
清单 3. 唤醒和通知 Consumer


public void add(Object o)

{

_queue.add(o);

kickThread();

}





public void kickThread()

{

if (!this._thread.isInterrupted())

{

synchronized(_waitForJobsMonitor)

{

_waitForJobsMonitor.notify();

}

}

}



示例:MessagesProcessor

为了向您展示 Consumer 类是如何工作的,我们将使用一个简单示例。MessagesProcessor 类以异步方式处理进入的消息(也就是说,不干扰调用线程)。其工作是在每个消息到来时打印它。MessagesProcessor 具有一个处理到来的消息作业的内部 Consumer。当新作业进入空队列时,Consumer 调用 proceSSMessage(String) 方法来处理它,如清单 4 所示:



清单 4. MessagesProcessor 类

class MessagesProcessor

{

String _name;

// anonymous inner class that supplies the consumer

// capabilities for the MessagesProcessor

private Consumer _consumer = new Consumer()

{

// that method is called on each event retrieved

protected void onConsume(Object o)

{

if (!(o instanceof String))

{

System.out.println("illegal use, ignoring");

return;

}

MessagesProcesser.this.processMessage((String)o);

}

}.setName("MessagesProcessor").init();



public void GotMessageEvent(String s)

{

_consumer.add(s);

}

private void processMessage(String s)

{

System.out.println(_name+" processed message: "+s);

}

private void terminate()

{

_consumer.terminateWait();

_name = null;

}

MessagesProcessor()

{

_name = "Example Consumer";

}

}



正如您可以从上面的代码中所看到的,定制 Consumer 相当简单。我们使用了一个匿名内部类来继承 Consumer 类,并重载抽象方法 onConsume()。因此,在我们的示例中,只需调用 processMessage。



Consumer 类的高级特性

除了开始时提出的基本需求以外,我们还为 Consumer 类提供了一些我们觉得有用的高级特性。



事件通知

onThreadTerminate():只在终止 Consumer 前调用该方法。我们出于调试目的覆盖了这个方法。


goingToRest():只在 Consumer 线程进入休眠前调用该方法(也就是说,只在调用 _waitForJobsMonitor.wait() 之前调用)。只在需要消费者在进入休眠之前处理一批已处理工作的复杂情况中,可能需要这种通知。

终止


terminate():Consumer 线程的异步终止。

terminateWait():设置调用线程一直等待,直到消费者线程实际终止为止。

在我们的示例中,如果使用 terminate() 而不是 terminateWait(),那么将会出现问题,因为在将 _name 设置成空值之后调用 onConsume() 方法。这将导致执行 processMessage 的线程抛出一个 NullPointerException。

结束语:Consumer 类的好处

可在参考资料一节下载 Consumer 类的源代码。请自由使用源代码,并按照您的需要扩展它。我们发现将这个类用于多线程应用程序开发有许多好处:

代码重用/重复代码的消除:如果您有 Consumer 类,就不必为您应用程序中的每个实例编写一个新的消费者。如果在应用程序开发中频繁使用生产者-消费者方案,这可以很大程度地节省时间。另外,请牢记重复代码是滋生错误的沃土。它还使基本代码的维护更为困难。

更少错误:使用验证过的代码是一种防止错误的好实践,尤其是处理多线程应用程序时。因为 Consumer 类已经被调试过,所以它更安全。消费者还通过在线程和资源之间担任安全中介来防止与线程相关的错误。消费者可以代表其它线程以顺序的方式访问资源。

漂亮、清晰的代码:使用 Consumer 类有助于我们编写出更简单的代码,这样的代码更容易理解和维护。如果我们不使用 Consumer 类,就必须编写代码来处理两种不同的功能:消费逻辑(队列和线程管理、同步等)和指定消费者的用法或功能的代码。

看完上述内容,你们对如何使用wait() 和notify() 机制来完成睡眠和踢有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 如何使用wait() 和notify() 机制来完成睡眠和踢

本文链接: https://lsjlt.com/news/232912.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用wait() 和notify() 机制来完成睡眠和踢
    今天就跟大家聊聊有关如何使用wait() 和notify() 机制来完成睡眠和踢,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。使用 wait() 和 notify() 机制来完成“睡...
    99+
    2023-06-03
  • java多线程wait()和notify()如何使用
    小编给大家分享一下java多线程wait()和notify()如何使用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!注:wait()和notify()应当用在synchronized内package com.te...
    99+
    2023-06-02
  • 如何使用HTML、CSS和JS制作随机密码生成器
    这篇文章主要介绍如何使用HTML、CSS和JS制作随机密码生成器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用HTML、CSS和JavaScript制作的随机密码生成器写在前面的...
    99+
    2024-04-02
  • python如何使用MyQR和qrcode来制作二维码
    这篇文章将为大家详细讲解有关python如何使用MyQR和qrcode来制作二维码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语...
    99+
    2023-06-15
  • 如何使用Git来控制用户账户和权限
    Git是一种强大的版本控制系统,也是一个非常受欢迎的开源工具。除了对代码进行版本控制之外,Git还可以用于管理用户账户和权限。本文将介绍如何使用Git来控制用户账户和权限。Git是怎样工作的?在Git中,每个用户都有一个账户,每个账户都有一...
    99+
    2023-10-22
  • 如何使用Phantomjs和Node完成网页的截屏快照
    这篇文章主要介绍了如何使用Phantomjs和Node完成网页的截屏快照,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。由于甲方爸爸的需要,最...
    99+
    2024-04-02
  • 如何在Fedora中集成和使用版本控制系统
    在Fedora中集成和使用版本控制系统可以通过以下步骤完成: 安装版本控制系统:Fedora默认安装了Git版本控制系统,如果需...
    99+
    2024-04-02
  • 如何使用Python和Git来实现数组的版本控制和快速管理?
    在开发过程中,我们经常需要对数组进行修改和管理。而使用版本控制工具可以帮助我们记录每次修改的历史,并且可以方便地回滚到之前的版本。本文将介绍如何使用Python和Git来实现数组的版本控制和快速管理。 Git是一款流行的分布式版本控制系统...
    99+
    2023-05-26
  • PHP和Unix系统如何一起使用来生成二维码对象?
    二维码是一种广泛使用的矩阵条形码,它可以存储大量的信息,包括网址、联系信息、文本等等。随着二维码的应用越来越广泛,越来越多的网站和应用需要使用二维码。在本文中,我们将探讨如何使用PHP和Unix系统一起生成二维码对象。 PHP是一种流行的...
    99+
    2023-07-21
    unix 二维码 对象
  • 如何在ASP.NET Core中使用NumPy和二维码库来生成QR码?
    在现代的软件开发中,二维码是一个非常有用的工具。它们可以用于各种不同的应用,例如将信息嵌入到图像中、用于支付等等。在本文中,我们将介绍如何在ASP.NET Core中使用NumPy和二维码库来生成QR码。 NumPy是一个用于数学计算的Py...
    99+
    2023-08-26
    numy 二维码 numpy
  • 如何在 Go 中使用 Spring 存储来生成和管理二维码?
    在当今的数字时代,二维码已经成为了一种非常常见的信息传递方式,它可以轻松地将数据编码为一张图片,从而方便地分享和传递信息。而在 Go 语言中,我们可以使用 Spring 存储来生成和管理二维码。本文将介绍如何使用 Spring 存储来生成...
    99+
    2023-10-27
    存储 二维码 spring
  • 如何在Linux中使用Shell 生成随机数和随机字符串
    本篇文章为大家展示了如何在Linux中使用Shell 生成随机数和随机字符串,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,...
    99+
    2023-06-09
  • 如何使用php函数来优化跨域请求和安全限制?
    在Web开发中,跨域请求和安全限制是常见的问题。跨域请求指的是在一个域名下的页面访问另一个域名下的资源。由于浏览器的安全策略,普通的跨域请求是被禁止的。安全限制则是指防止恶意攻击和保护用户隐私的措施。PHP提供了一些函数和方法来优化这些问题...
    99+
    2023-10-21
    优化 跨域请求 安全限制
  • 如何使用Python完成SAP客户端的打开和系统登陆功能
    本篇内容介绍了“如何使用Python完成SAP客户端的打开和系统登陆功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们都知道,SAP原生...
    99+
    2023-06-30
  • 如何使用 path 和 numy 在 ASP 中快速生成随机数?
    随机数在计算机编程中是一个非常常见的需求。在 ASP 中,我们可以使用 path 和 numpy 库来快速生成随机数。本文将介绍如何使用这两个库来生成随机数,并提供一些实例代码来演示。 path 库 path 库是 Python 中的一个常...
    99+
    2023-08-29
    npm path numy
  • PHP和Git之间的同步机制在Laravel中如何使用?
    Laravel是一个流行的PHP框架,具有许多强大的特性。其中一个特性是Laravel与Git的集成,这使得开发人员可以轻松地在版本控制系统中管理他们的代码。本文将介绍PHP和Git之间的同步机制在Laravel中如何使用。 Git是一个...
    99+
    2023-11-02
    同步 git laravel
  • 如何使用 Spring 存储和 Go 生成二维码来提高企业效率?
    随着企业信息化程度的不断提高,二维码的应用越来越广泛。它不仅可以提高企业效率,还可以为消费者提供更加便捷的服务。本文将介绍如何使用 Spring 存储和 Go 生成二维码来提高企业效率。 一、Spring 存储 Spring 是一个轻量级的...
    99+
    2023-10-27
    存储 二维码 spring
  • 如何使用监控和预警机制确保 PHP 函数高性能运行?
    监控和预警机制可确保 php 函数高性能运行:1.监控机制收集运行时间、内存使用等指标,识别性能瓶颈。2.预警机制根据阈值设置报警,当指标超出阈值时及时提醒。3.实战案例:监控检测函数执...
    99+
    2024-04-25
    php 高性能
  • 如何使用CentOS系统中的访问控制列表(ACL)来限制文件和目录的访问权限
    使用CentOS系统中的访问控制列表(ACL)来限制文件和目录的访问权限,可以按照以下步骤进行操作:1. 检查文件系统是否支持ACL...
    99+
    2023-10-10
    CentOS
  • ASP和Laravel中的二维码:如何使用异步编程来提高它们的生成速度?
    二维码是一种非常流行的图像编码方式,它可以存储大量的信息,并且在现代社会中被广泛应用于各种场景中。在ASP和Laravel开发中,我们可以使用各种库来生成二维码,但是由于生成二维码需要大量计算,因此生成速度通常较慢。在这篇文章中,我们将介绍...
    99+
    2023-07-06
    二维码 laravel 异步编程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作