【Java】集合概念及多线程

HashSet 、 LinkedHashSet 和 TreeSet 的主要区别在于底层数据结构不同。

HashSet 的底层数据结构是哈希表(基于 HashMap 实现)。

LinkedHashSet 的底层数据结构是链表和哈希表,元素的插⼊和取出顺序满⾜ FIFO。

TreeSet 底层数据结构是红⿊树,元素是有序的。

多线程的使用

  1. 继承Thread类 (可以说是 将任务和线程合并在一起)
  2. 实现Runnable接口 (可以说是 将任务和线程分开了)
  3. 实现Callable接口 (利用FutureTask执行任务)
继承Thread类

//继承Thread实现多线程
class Thread1 extends Thread{  
    private String name;  
    public Thread1(String name) {  
       this.name=name;  
    }  
    public void run() {  
        for (int i = 0; i < 5; i++) {  
            System.out.println(name + "运行  :  " + i);  
            try {  
                sleep((int) Math.random() * 10);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
        }  
         
    }  
}  
public class Main {  
  
    public static void main(String[] args) {  
        Thread1 mTh1=new Thread1("A");  
        Thread1 mTh2=new Thread1("B");  
        mTh1.start();  
        mTh2.start();  
  
    }  
}  
 

上面这个两个类,Thread1类继承了Thread父类,并重写了里面的run方法。实现了多线程里面的方法,并在main函数中进行实例化了两个mTh1,mTh2两个线程。

线程的⽣命周期和状态

NEW: 初始状态,线程被创建出来但没有被调⽤

RUNNABLE: 运⾏状态,线程被调⽤了 start() 。 start() 等待运⾏的状态。

BLOCKED :阻塞状态,需要等待锁释放。

WAITING:等待状态,表示该线程需要等待其他线程做出⼀些特定动作(通知或中断)。 TIME_WAITING:超时等待状态,可以在指定的时间后⾃⾏返回⽽不是像 WAITING 那样⼀直等 待。

TERMINATED:终⽌状态,表示该线程已经运⾏完毕

避免死锁的方法

1、银行家算法

银行家算法是一种死锁避免的算法,它的设计灵感来自于银行业的贷款和存款模型。在银行家算法中,系统被视为一个银行,进程被视为银行的客户,而资源则被视为银行的资金。这个类比帮助理解了资源的分配和使用过程,以及系统如何避免死锁的发生。

关系:

  1. 资源分配类比: 在银行家算法中,系统中的资源被视为银行的资金或贷款,进程对资源的请求则类比为客户对银行的贷款请求。

  2. 资源请求和释放: 进程在执行过程中会请求资源,就像客户向银行申请贷款一样。当进程完成任务后,会释放已经使用的资源,类似于客户还清贷款后归还资金给银行。

  3. 安全性检查: 银行家算法通过模拟系统资源分配的过程来检查系统是否处于安全状态,即是否存在一种资源分配顺序,使得所有进程都能完成并释放资源,类似于银行在进行贷款审批前的风险评估。

  4. 资源足够性: 银行家算法要求在分配资源时,系统必须确保分配后还有足够的资源供其他进程使用,类似于银行在进行贷款审批时需要确保自身还有足够的资金供其他客户使用,以避免银行出现资金短缺的情况。

2、时间戳算法(Timestamp-based Algorithms)

 时间戳算法基于全局的时间戳来分配资源和管理进程的请求。每个进程和资源都有一个唯一的时间戳,系统根据时间戳的顺序来决定资源的分配和进程的执行顺序。这种算法可以避免死锁,但可能会增加系统的开销。

Java虚拟机(JVM)的垃圾回收机制是指在Java程序运行过程中,自动识别并回收不再被程序使用的内存空间的过程。Java语言中的垃圾回收机制是一种自动化的内存管理方式,开发者不需要显式地去释放内存,而是由JVM自动管理。以下是JVM垃圾回收机制的一般原理和常见的回收算法:

原理:

  1. 对象生命周期管理: Java中的对象在被创建后,会被JVM自动跟踪管理其生命周期。当对象不再被引用时,它会变得不可达(即没有任何引用指向它),成为垃圾。

  2. 垃圾识别: 垃圾回收器负责识别不再被引用的对象,并将其标记为垃圾。

  3. 垃圾回收: JVM中的垃圾回收器会定期或在内存达到一定阈值时,自动回收被标记为垃圾的对象所占用的内存空间,将其释放出来供后续的对象使用。

垃圾回收算法:

  1. 标记-清除算法(Mark and Sweep): 首先标记所有活跃对象,然后清除所有未标记的对象,释放它们所占用的内存空间。这种算法会产生内存碎片,可能导致内存碎片化。

  2. 复制算法(Copying): 将内存空间分为两个区域,一半用于存放对象,另一半保持空闲。当一个区域被占满后,将存活的对象复制到另一个区域,并清除原区域中的所有对象。这种算法解决了内存碎片化的问题,但会浪费一部分内存空间。

  3. 标记-整理算法(Mark and Compact): 结合了标记-清除和复制算法的优点。首先标记活跃对象,然后将活跃对象向一端移动,之后清理出空闲内存。这种算法避免了内存碎片化,并减少了内存移动的次数。

  4. 分代回收算法(Generational Garbage Collection): 将堆内存分为不同的代(Generation),一般分为新生代(Young Generation)和老年代(Old Generation)。新生代中的对象生命周期短,老年代中的对象生命周期长。根据代的特性采用不同的垃圾回收算法和策略。

  1. 数据一致性: 在分布式环境中,各个节点的计算结果需要合并以得到全局的最优解。如果多个节点在没有同步的情况下同时修改共享状态,可能会导致最终的结果不一致。通过使用锁来控制对共享状态的访问,可以确保数据的一致性。

  2. 部分计算依赖: 在一些情况下,某些节点的计算结果可能依赖于其他节点的计算结果。使用锁可以确保节点之间的计算顺序,保证依赖关系的正确性。

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

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

相关文章

Linux系统下使用Parted调整物理分区大小

前言 在管理Linux系统时&#xff0c;有时需要对物理分区大小进行调整以满足不断变化的需求。Parted是一款功能强大的分区管理工具&#xff0c;可以帮助您轻松地进行这项任务。本文将简要介绍如何使用Parted来调整物理分区大小&#xff0c;让您能够快速且安全地完成这一操作。 …

【前端】4. CSS综合案例

1. 模拟新闻界面 <!-- 1.模拟实现新闻界面 --><!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

YMP实现Oracle迁移到YashanDB

迁移需求 ip地址 数据库信息 操作系统信息 源库 192.168.3.132 实例名topdh 用户密码TOPICIS/oracle 端口1521 Centos7.9 x86_64 目标库 192.168.3.175 实例名yasdb 用户密码topicist/opicis 端口1688 Centos7.9 x86_64 迁移前准备 YMP工具获取 根据实际需求向厂…

sklearn【AUC-ROC】原理,以及绘制ROC曲线!

一、AUC-ROC 介绍 在分类任务中&#xff0c;特别是当数据集中的类别分布不平衡时&#xff0c;评估模型的性能变得尤为重要。AUC-ROC&#xff08;Area Under the Receiver Operating Characteristic Curve&#xff0c;受试者工作特征曲线下的面积&#xff09;是一种有效的评估指…

Vue3:组合式API的基本使用

一、前言 本文主要讲述在Vue3中组合式API的基本使用。 二、组合式API的写法 1、数据 组合式API中&#xff0c;数据在setup函数里面声明数据要在return中返回才能在模板中渲染使用如果数据类型不是响应式数据&#xff0c;当数据改变时&#xff0c;已经展示在页面上的数据不会…

S32 Design Studio PE工具配置Power_Manager

工具配置 基本就是默认配置就行&#xff0c;就是在这6个状态里面跳转&#xff0c;重点就是前面2个状态.这个是芯片的电源管理&#xff0c;跟产品的电源管理是两回事。 生成代码 在Generated_Code/pwrMan1.c 里面&#xff0c;对应刚才配置的信息&#xff0c;一共有6个状态。 …

土壤水分检测仪中应用的数字电容传感芯片

土壤水分检测仪&#xff0c;它是基于频域反射&#xff08;Frequency Domain Reflectometry&#xff0c;FDR&#xff09;原理&#xff0c;能够准确对传感器周围的土壤水分情况进行监测,可对10cm、20cm、30cm、40cm、50cm的较多5个监测层面进行测量。广泛应用于农田蒸散、作物耗水…

【话题】程序员如何搞副业,简单探讨下

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章&#xff0c;这是《话题》系列文章 目录 背景前提条件打造私域广结朋友平台 技能转化为价值1. 副业途径2. 如何开展3. 未来趋势与建议4. 挑战与策略5. 规划与发展 文章推荐 背景 程序员不仅拥有将抽象概念转化…

文献速递:深度学习胶质瘤诊断---使用深度学习在 MRI 图像中进行低级别胶质瘤的脑肿瘤分割和分级

Title 题目 Brain tumor segmentation and grading of lower-grade glioma using deeplearning in MRI images 使用深度学习在 MRI 图像中进行低级别胶质瘤的脑肿瘤分割和分级 01文献速递介绍 胶质瘤是最常见的脑肿瘤&#xff0c;根据肿瘤的恶性程度和生长速率具有不同的分级…

婴儿用的洗衣机买哪种好?四款超实用高质量婴儿洗衣机推荐!

近几年科技高速发展&#xff0c;我们的生活也因此变得更加便捷、健康高效。尤其是在家庭生活中&#xff0c;各种新兴家电的出现让我们的生活变得更加健康卫生。婴儿洗衣机也为现代家庭提供了极大的便捷。由于婴儿刚出生免疫力比较弱&#xff0c;所以建议婴儿的衣物尽量和大人的…

操作系统命令(贪吃蛇项目)

&#x1f3dd;1.获得句柄 GetStdHandle是⼀个Windows API函数。它用于从⼀个特定的标准设备&#xff08;标准输入、标准输出或标 准错误&#xff09;中取得⼀个句柄&#xff08;用来标识不同设备的数值&#xff09;&#xff0c;使用这个句柄可以操作设备。 ⛳️函数原型&…

力扣:219. 存在重复元素 II

力扣&#xff1a;219. 存在重复元素 II 给你一个整数数组 nums 和一个整数 k &#xff0c;判断数组中是否存在两个 不同的索引 i 和 j &#xff0c;满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 …

SIP-7035 隧道广播功率放大器 校园网络广播功放sip定压功放

SIP-7035 隧道广播功率放大器 校园网络广播功放sip定压功放 产品介绍18123651365微信 SIP-7035是我司的一款合并式定压功放&#xff0c;支持标准SIP协议&#xff0c;具有10/100M以太网接口&#xff0c;后面板上有2组AUX音源输入和6.35mm接口的麦克风输入&#xff0c;可以输入…

Grass注册不了、按钮灰色的解决方案

近期相信grass挂机项目不少人有所有接触。还有不了解这个项目的可以看看博客&#xff1a; http://t.csdnimg.cn/bI4UO 但是不少人注册时遇到无法注册的问题&#xff0c;或者是注册按钮显示灰色&#xff0c;放上鼠标时显示禁止。这也是博主在尝试时遇到的问题。 经过探索&…

二维数组之前缀和下篇

在此之前&#xff0c;可以先去看看二维数组之二维前缀和首篇和二维数组之前缀和中篇。 最大子数组和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例 1&#xff1a; …

GPT人工智能在线网页版大全

平民不参与内测&#xff0c;还能使用 ChatGPT 吗&#xff1f; 自去年 ChatGPT 爆红以来&#xff0c;关于它的消息铺天盖地。如果你真的想使用它&#xff0c;途径有很多。除了官方网站外国内还有许多 ChatGPT 的镜像网站&#xff0c;其中不乏免费的 3.5 版本。虽然有些网站需要…

2024年04月18日优雅草便民tools开源-git以及dcloud同步-长期更新

优雅草小工具-数据来自优雅草api赋能 优雅草小工具-数据来自优雅草api赋能-优雅草便民工具是一款由成都市一颗优雅草科技有限公司打造的便民查询公益工具&#xff0c;2024年1月17日正式发布v1.0.0版本&#xff0c;本工具为了方便大众免费使用&#xff0c;本生活小工具会陆续加入…

Pixverse:开启文生视频与图生视频新纪元

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Python基础02-掌握HTTP API的秘诀

在下面文案基础上扩展&#xff0c;写一篇技术博客&#xff0c;标题要有吸引力&#xff1f; 标题&#xff1a; 在Python中&#xff0c;使用HTTP API已成为一种常见的操作。本文将深入探讨如何使用Python的requests库与HTTP API进行交互。我们将学习如何发送GET和POST请求、处理…

怎么使用Python提取快递信息

目录 一、前言 二、准备工作 三、安装必要的库 四、编写代码 导入必要的库 定义快递查询函数 调用快递查询函数 五、进阶操作 定时查询快递信息 发送快递信息通知 六、注意事项 一、前言 在提取快递信息之前&#xff0c;我们需要了解快递查询的基本原理。大部分快递…