多线程知识-11

Runnable 和 Thread 用哪个好

使用Runnable接口的好处是:

  1. 避免了单继承的限制:当你的类已经继承了另一个类时,你仍然可以实现Runnable接口来创建线程。
  2. 提高代码的复用性:你可以将Runnable对象传递给多个线程来执行,从而实现代码的复用。
  3. 适合资源共享:多个线程可以共享同一个Runnable对象,从而实现对同一个资源的访问。

使用Thread类的好处是:

  1. 简单直观:Thread类提供了一些常用的方法,如start()、sleep()等,可以更方便地控制线程的执行。
  2. 可以直接继承Thread类来创建线程,不需要实现接口。

   如果你的类已经继承了另一个类,或者需要与多个线程共享资源,那么使用Runnable接口是一个更好的选择。如果你只需要简单地创建一个线程并执行任务,可以直接继承Thread类。

 notify 和 notifyAll 有什么区别

     在 Java 中,notify() 和 notifyAll() 都是 Object 类中的方法,用于唤醒等待在当前对象上的线程。区别在于:

  1. notify() 方法会唤醒在对象的等待池中等待时间最长的一个线程,该线程将进入可运行状态,但并不能立即获得锁资源。如果有多个线程等待,则只有一个线程能被唤醒。
  2. notifyAll() 方法会唤醒所有在对象的等待池中等待的线程,所有线程都将进入可运行状态,但并不能立即获得锁资源。

下面是一个例子,通过 synchronized、wait()、notify() 方法演示了 notify() 和 notifyAll() 的区别:

public class NotifyExample {public static void main(String[] args) {Message message = new Message();Thread thread1 = new Thread(new Waiter(message), "Waiter1");Thread thread2 = new Thread(new Waiter(message), "Waiter2");Thread thread3 = new Thread(new Notifier(message), "Notifier");thread1.start();thread2.start();thread3.start();try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}message.setReady(true);synchronized (message) {message.notify(); // 唤醒等待时间最长的一个线程}}
}class Message {private boolean ready;public boolean isReady() {return ready;}public void setReady(boolean ready) {this.ready = ready;}
}class Waiter implements Runnable {private final Message message;public Waiter(Message message) {this.message = message;}@Overridepublic void run() {synchronized (message) {try {if (!message.isReady()) {System.out.println(Thread.currentThread().getName() + ": 正在等待消息...");message.wait();}} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + ": 收到消息!");}}
}class Notifier implements Runnable {private final Message message;public Notifier(Message message) {this.message = message;}@Overridepublic void run() {synchronized (message) {System.out.println(Thread.currentThread().getName() + ": 准备通知等待的线程");message.setReady(true);
//      message.notify(); // 使用 notify() 方法message.notifyAll(); // 使用 notifyAll() 方法}}
}

运行上述代码,结果会根据调用的 notify() 或 notifyAll() 方法而有所不同。如果使用 notify() 方法,则只有一个 Waiter 线程会被唤醒并继续执行;如果使用 notifyAll() 方法,则所有的 Waiter 线程都会被唤醒并继续执行。

总结

    在Java中,notify()和notifyAll()是用于线程间通信的方法。

  1. notify()方法:该方法用于唤醒在对象的等待池中等待的单个线程。如果有多个线程在等待,则随机选择一个线程被唤醒。被唤醒的线程将进入就绪状态,等待获取对象的锁。

  2. notifyAll()方法:该方法用于唤醒在对象的等待池中等待的所有线程。被唤醒的线程将进入就绪状态,等待获取对象的锁。notifyAll()相当于广播通知,通知所有等待的线程。

  3. Runnable接口:Runnable是一个函数式接口,用于定义一个可以被线程执行的任务。实现Runnable接口的类可以被传递给Thread类的构造方法,从而创建一个线程。Runnable接口只有一个run()方法,需要在该方法中定义线程的执行逻辑。

  4. Thread类:Thread类是Java中表示线程的类,可以通过继承Thread类或传递实现Runnable接口的对象来创建线程。Thread类提供了一些方法用于管理线程,如start()用于启动线程,sleep()用于使线程休眠,join()用于等待其他线程执行完毕等。

  • notify()和notifyAll()方法用于线程间通信,唤醒等待的线程。
  • Runnable接口用于定义一个可以被线程执行的任务。
  • Thread类是Java中表示线程的类,可以通过继承Thread类或传递实现Runnable接口的对象来创建线程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/22011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++设计模式-策略模式,AI角色动态选择行为

运行在VS2022,x86,Debug下。 27. 策略模式 策略模式让算法的选择与使用独立开来,使得代码更灵活、可扩展和易维护。应用:如在游戏开发中,AI角色需要根据环境和条件做出不同的行为,如寻路、攻击、躲避等。可…

深度解析CSS中为什么会有Stacking Context的概念

CSS中的堆叠上下文(Stacking Context)概念是为了管理和控制网页元素的重叠顺序而引入的。堆叠上下文的引入解决了以下几个关键问题: 层次管理: 在网页中,多个元素可能会相互重叠,堆叠上下文定义了这些元素的…

01-CompressionWebpackPlugin---提高 Web 应用性能的利器

CompressionWebpackPlugin—提高 Web 应用性能的利器 笔记分享 在现代 Web 开发中,优化资源加载速度是提升用户体验的重要环节。减少文件大小可以显著提升网页加载速度,从而改善用户体验。CompressionWebpackPlugin 是一个强大的 Webpack 插件&#xff…

【安装笔记-20240529-Windows-Electerm 终端工具】

安装笔记-系列文章目录 安装笔记-20240529-Windows-Electerm 终端工具 文章目录 安装笔记-系列文章目录安装笔记-20240529-Windows-Electerm 终端工具 前言一、软件介绍名称:Wireshark主页官方介绍功能特性 二、安装步骤测试版本:electerm-1.39.35-win-…

【蓝桥杯】常见的数据结构

🌸个人主页:Yang-ai-cao 📕系列专栏:蓝桥杯 C语言 🍍博学而日参省乎己,知明而行无过矣 目录 🌸个人主页:Yang-ai-cao 📕系列专栏:蓝桥杯 C语言 &…

Spring项目中Ordered接口的应用:全局过滤器(GlobalFilter)的顺序控制

在Spring框架,尤其是Spring Cloud Gateway或Spring WebFlux项目中,Ordered接口扮演着重要的角色,特别是在实现全局过滤器(GlobalFilter)时,用于控制过滤器执行的优先级。下面将介绍如何在Spring项目中使用Ordered接口来管理Global…

【AIoT-Robot】3d hand pose

手语是聋哑人士的主要沟通工具,它是利用手部和身体的动作来传达意义。虽然手语帮助它的使用者之间互相沟通,但聋哑人士与一般人的沟通却十分困难,这个沟通障碍是源于大部分人不懂得手语。 1. 手势&&手语 手势:手的姿势 ,通常称作手势。它指的是人在运用手臂时,所…

初识springcloud

springcloud eureka eureka的作用 消费者该如何获取服务提供者具体信息? 服务提供者启动时向eureka注册自己的信息,eureka保存这些信息消费者,根据服务名称向eureka拉取提供者信息 如果有多个服务提供者,消费者该如何选择? 服务消费者利…

创建模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中,自定义模块有两个作用:一个是规范代码,让代码更易于阅读,另一个是方便其他程序使用已经编…

ORACLE创建dblink

dblink的作用 dblink数据库链接顾名思义就是数据库的链接,当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中…

Ubuntu22.04之解决:terminal使用alt+1/alt+2/alt+3失效问题(二百三十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

安卓玩机搞机技巧综合资源----电脑控制手机 投屏操控的软件工具操作步骤解析【二十二】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

外发邮件监控的六种方法, 监控软件如何防止邮件泄密?

外发邮件监控的六种方法, 监控软件如何防止邮件泄密? 外发邮件监控是现代企业信息安全管理的重要组成部分,它有助于防止敏感信息泄露、保护知识产权、以及确保企业合规。以下是外发邮件监控的几种主要方法,这些方法结合使用可以为…

2024最新 Jenkins + Docker实战教程(八)- Jenkins实现集群并发构建

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

【Python Cookbook】S01E14 从字典中提取子集

目录 问题解决方案讨论 问题 如果我们想基于一个字典的子集创建另外一个字典,该如何做? 解决方案 利用 字典推导式 来解决问题: prices {ACME: 45.23,AAPL: 612.78,IBM: 205.55,HPQ: 37.20,FB: 10.75 }p1 {key:value for key, value in…

AI学习指南机器学习篇-逻辑回归损失函数和优化

AI学习指南机器学习篇-逻辑回归损失函数和优化 引言 在机器学习中,逻辑回归是一种常用的分类算法。在逻辑回归中,我们需要定义一个损失函数来衡量模型预测值与实际标签之间的误差,并且需要通过优化算法来最小化损失函数,从而得到…

群体优化算法----人工蜂群优化算法应用于路径规划(机器人避开平面障碍寻找最短路线)

介绍 人工蜂群优化算法(Artificial Bee Colony Algorithm, ABC)是由Dervis Karaboga在2005年提出的一种模拟蜜蜂觅食行为的优化算法。该算法基于蜜蜂群体的分工合作和信息交流机制,通过模拟蜜蜂寻找食物源的过程来解决优化问题。ABC算法因其…

netplan网络配置@ubuntu留档

ubuntu使用netplan进行网络配置,简单又方便。 配置的时候编辑/etc/netplan 目录里的文件即可,如00-installer-config.yaml文件。 固定ip配置 network:ethernets:enp0s5:dhcp4: noaddresses: [192.168.1.7/24]routes:- to: defaultvia: 192.168.1.1name…

手机和WINDOWS电脑蓝牙连接后怎样放歌,无法选择媒体音频 蓝牙媒体音频勾选不上

手机和电脑蓝牙连接后怎样放歌 要将手机通过蓝牙连接到电脑并播放音乐,可以按照以下步骤操作: 确保手机和电脑都支持蓝牙功能,并且蓝牙功能已经开启。 在电脑上,打开“设置”> “设备”> “蓝牙和其他设备”。 点击“添…

INT202 例题

算法复杂度 O(n):表示算法的渐进上界。如果一个算法的运行时间是O(n),那么它的运行时间最多与输入规模n成正比。换句话说,当输入规模n增加时,算法的运行时间不会超过某个常数倍的n。比如,如果一个算法的时间复杂度是O(…