分布式系统详解--基础知识(线程)

article/2025/9/14 4:09:01

                     分布式系统详解--基础知识(线程)

一、导读

          前面跟大家讲了一下  分布式系统详解--基础知识(概论) ,可以稍微了解一下大体上分布式是怎么一回事了。这片篇文章主要是讲述一下线程的问题分别介绍一下,什么线程,进程和线程之间的关系,最后文章后面介绍一下多线程和分布式之间的关系。

二、来看看图解定义(看图理解定义效果更好~)

程序:就是为了解决某些特定问题或实现特定目标运用计算机语言编写的命令序列集合(都懂吧~~不懂再百度)。

进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

线程:程序执行流的最小单元。

小明开了一家工厂,工厂中设立了三个车间,有30个员工。为了员工福利,盖了一个餐厅,一个浴室,当然也有个一个厕所。

CPU:计算机的核心就是CPU。就像是一家工厂,加工制造时刻的运作着。

进程:进程呢,就像是工厂当中车间一样,如果给车间供应的电仅仅够一个车间使用,那么当一个车间开工的时候其他车间只能干瞪眼。这就说到了单个CPU一次只能运行一个进程,现在的处理器是多线程处理器,可以同时处理多个进程。

线程:车间里的每一个员工就相当于进程中的一个线程,员工协同完成任务,线程也是协同完成一个进程。

内存:每个车间有固定的大小,员工的人数不易太多。对于线程来说也是这样,线程开启,意味着会占用一定的内存。

互斥锁:现在的公共厕所中只能允许进去一个人,进入之后,其他人就需要在外面等着。相对于内存而言,就是防止多个线程同时使用一块共同的一块内存。

共享内存:开的浴室,大家都可以进(当然男的进男浴室~女的进女浴室~),进程的内存空间是共享的,每个线程共享这些内存。

信号量:但是浴室的人数也是有上线的,当人数达到一定程度就不能再进去了,那怎么办呢?就可以在门外挂上n把钥匙,每进去一个,拿一把钥匙,当员工出来的时候再把钥匙挂在外面的墙上,后来有人来的时候发现门外没有钥匙的时候,就需要等在外面。线程也是如此。这叫信号量。

好了,差不多了吧******

三、让我们来看一看Java中的多线程

示意图:

new(新建状态):实现runnable接口或继承Thread类。new一个实例:

Thread t = new MyThread();

在这儿需要值得注意的一个地方。为什么实现runnable接口和继承Thread类之后重写run方法就行了呢?下面~~

public class java.lang.Thread implements java.lang.Runnable {

Runnable(就绪状态):在这儿t.start();方法就可以进入到就绪状态,该线程也就是做好了准备随时准备被CPU调用,但这个时候还没被执行。

Running(运行状态):当CPU开始调度正在处于就绪状态的线程时,此时线程得以真正进行执行。也就是说,就绪状态是进入到运行状态的唯一入口。

Blocked(阻塞状态):线程运行当中因为某种原因,暂时放弃了CPU 的使用权,线程自动跑到阻塞状态。此时他们需要经过一些等待或者被唤醒才能重新回到就绪状态等待重新运行。而阻塞的状态有三种类型,如图所示:

(1)等待阻塞:运行过程中调用了wait()方法,进入等待阻塞。

(2)同步阻塞:线程在获取synchronized同步锁失败,其他线程正在使用,他就进入了同步阻塞。

(3)其他阻塞:通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

关于Java实现多线程的例子,网上一大堆,就不罗列了。

四、多线程在分布式下的扩展-集群

       这里再重复赘述一下集群的概念,其实就是同一个机组之下多个节点完成同样的事情,这就和多线程说到一块儿了。在这儿要说另外的两个定义,第一个是app集群,第二个是数据库集群。

app集群:一般有一个管理节点,它做的事情很少,但是却非常重要,我们可以从这个管理节点中获取每一个节点的一些应用部署和配置以及状态信息;另外一个是代理节点或者叫分发节点,这个作用是在管理节点之下做分发,这里要保持session一致。集群在这里做到的就是一台机器挂掉了之后,其余的可以顶替。在这里集群组也就相当于一个大的线程组。

数据库集群:这个相对于app集群来说就要难一点了。app集群在垂直扩展上会很方便,但是数据库集群要做的是数据的一致性,实现事务级别的切换和一定的网络计算能力。内存中也比较复杂,因为数据读入到内存中要将多个主机的内存配置得像一个内存一样(通过心跳完成),而且需要得到动态扩展的能力。

引用一位大牛的话,可以自己品一品

        大型系统架构最终数据分布,集中式管理,分布式存储计算,业务级别横向切割,同业务下app垂直分隔,数据级别散列+range+位图分布结构,异地分流容灾,待命机组和资源调配的整合,这一切的基础都来源于多线程的设计思想架构在分布式机组上的实现。

嗯,这是对线程最基本的认识,也是后期学习的必备知识,应当掌握。

欢迎订阅关注公众号(JAVA和人工智能)

                                                           获取更多免费书籍、资源、视频资料

 

                                    

文章回顾链接:

 1,分布式系统详解--基础知识(概论)

 2,分布式系统详解--基础知识(线程)

 3,分布式系统详解--基础知识(通信)

 4,分布式系统详解--基础知识(CAP)

 5,分布式系统详解--基础知识(安全)

 6,分布式系统详解--基础知识(并发)

 7,分布式系统详解--架构简介(微服务)

 8,分布式系统详解--Linux(权限)

 9,分布式系统详解--框架(Hadoop-单机版搭建)

10,分布式系统详解--架构(Hadoop-克隆服务器)

11,分布式系统详解--框架(Hadoop-集群搭建)

12,分布式系统详解--框架(Hadoop-Ssh免密登陆配置)


http://chatgpt.dhexx.cn/article/6TVFy37M.shtml

相关文章

分布式项目线程安全问题(电商扣减库存的安全问题1)

电商减库存存在的安全问题 Override public void deductStock(Map<Long, Integer> skuMap) {for (Map.Entry<Long, Integer> entry : skuMap.entrySet()) {Long skuId entry.getKey();Integer num entry.getValue();// 查询skuSku sku getById(skuId);// 判断…

分布式项目中 如何保证线程安全问题?-------ZooKeeper

前沿&#xff1a; 上篇文章我们聊到了在解决分布式项目中线程安全问题&#xff0c;提到解决方案还有其他的&#xff0c;那么在此提出 基于 zookeeper 解决分布式项目中的线程安全问题 也是目前市面上比较流行的。做为一个高级开发工程师也是必须要学习的。 ZooKeeper是什么东…

分布式线程安全(redis、zookeeper、数据库)

https://blog.csdn.net/u010963948/article/details/79006572 Q:一个业务服务器&#xff0c;一个数据库&#xff0c;操作&#xff1a;查询用户当前余额&#xff0c;扣除当前余额的3%作为手续费 synchronized lock db lock Q&#xff1a;两个业务服务器&#xff0c;一个数据库&…

分布式集群中如何保证线程安全?

目录 分布式集群中的线程安全问题 解决方法 串行化 分布式锁 Redis如何实现呢&#xff1f; 问题&#xff1a;setnx刚好获取到锁&#xff0c;业务逻辑出现异常&#xff0c;导致锁无法释放 问题&#xff1a;可能会释放其他服务器的锁。 问题&#xff1a;删除操作缺乏原子…

java outlook 发送邮件_基于java使用JavaMail发送邮件

一、邮件的相关概念 邮件协议。主要包括&#xff1a; SMTP协议&#xff1a;Simple Mail Transfer Protocol&#xff0c;即简单邮件传输协议&#xff0c;用于发送电子邮件 POP3协议&#xff1a;Post Office Protocol 3&#xff0c;即邮局协议的第三个版本&#xff0c;用于接收邮…

java 发邮件(有正文,有图片,有附件)

一 需求: 1 java实现邮件发送 2 发送内容: ① 正文: 图片说明和图片 ② 附件一: 图片作为附件发送 ③ 附件二: Excel表格 二 思路: 1首先创建一个 Java 工程&#xff0c;把下载好的 javax.mail.jar 作为类库加入工程 2邮件创建步骤: 配置连接邮件服务器的参数( 邮件服务器SM…

java接收邮件_Java实现邮件收发

一. 准备工作 1. 传输协议 SMTP协议-->发送邮件: 我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器) POP3协议-->接收邮件: 我们通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器) 2. 邮件收发原理 闪电…

java发送邮件工具类

1. 普通java实现邮件发送 1.1 创建maven项目&#xff0c;配置pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&qu…

java发送邮件带附件

一、 开启SMTP服务 1.基本都在邮箱设置里&#xff0c;开启后会获得神秘代码&#xff0c;后面有用。 2.记得添加依赖&#xff0c;或者自己添加jar包。 <dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>…

java 邮件模板

邮件发送代码可参照 java 发送邮件 1.情形 邮件发送代码可参照上述&#xff0c;本例只说明如果读取模板文件。公司定义模板较为复杂的情况&#xff0c;可采用此类发送方式 2. 模板 2.1 resource 建立模板 2.2 ftl 模板如下 <p>您好&#xff0c;${name}&#xff0c;您…

使用JAVA实现邮件发送功能

一、准备工作 小编今天以 QQ邮箱 进行演示操作。 想要使用代码操作邮箱发送邮件&#xff0c;需要在邮箱设置中申请开通 POP3/SMTP 服务。 接下来跟着小编的图文一步一步的操作开通吧&#xff01; 1.1 登录网页QQ邮箱&#xff0c;点击页面顶部设置按钮。 1.2 点击后会打开邮箱…

java发送qq邮件

1.登录qq邮箱 1&#xff09;点击设置 2&#xff09;点击账户 3&#xff09;开启第一个服务&#xff0c;我已经开过了 4&#xff09;开启验证&#xff08;让你发送指定内容到某个号码&#xff09;&#xff0c;完成后点击我已发送&#xff0c;就会出现授权码&#xff0c;授权码很…

java实现邮件发送

一.第一步:导入两个jar包。 activation.jar 和 mail.jar, 一定要添加到构建路径(不然找不到包) 两个用于Java发送邮件的jar包-Java文档类资源-CSDN下载 二、创建邮箱工具类:Mail.java import java.util.*; import java.io.*; import javax.mail.*; import javax.m…

Java(81):Java发邮件简单示例

Java Email jar包下载地址&#xff1a;JavaMail API https://www.oracle.com/java/technologies/javamail.html JavaMail 右侧下载&#xff0c;选择jar包下载 API文档参考&#xff1a;JavaMail API documentation https://javaee.github.io/javamail/docs/api/ 或直接引用…

java发送qq邮件_「java发邮件」Java 通过SMTP实现发送QQ邮件 - seo实验室

java发邮件 在Eclipse中创建项目&#xff0c;并把javax.amil.jar和commons-email-1.5,jar复制到项目中 链接&#xff1a;https://pan.baidu.com/s/1sQjA1GEpKi6IJJRGHKxjeA 密码&#xff1a;4ene 添加步骤&#xff1a; 1.首先在项目下创建一个文件夹&#xff0c;保存我们的jar包…

Java发邮件配置-hutool+腾讯企业邮箱

1、技术选型 1.1、hutool工具 1.2、javax.mail 1.3、腾讯企业邮箱2、环境准备 2.1、pom <!--javax.mail--><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version></dependen…

Java(83)Java发邮件简单工具类

1、Maven引用 <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api --><dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.6.2</version></dependency><…

java发邮件 动态切换当前发送人

最近项目需要实现一个发送邮件功能&#xff0c;踩了一些坑&#xff0c;最终实现了。 在此写一下心得 开始做的时候一塌糊涂&#xff0c;觉得挺难的&#xff0c;但是做完之后发现其实简单的一批&#xff0c;接下来我就来写一下实现流程。 1、准备好拿来发送邮件的账号&#xf…

Java 发邮件-带附件且正文html格式

入职新公司不久&#xff0c;接到一个给用户发邮件的需求&#xff0c;有两点需要说明的&#xff1a;1&#xff09;正文需要格式化&#xff1b;2&#xff09;需要带附件。 大概了解了一下需求&#xff0c;我马上开始思考&#xff0c;现有项目中是否有类似的接口可以支持&#xf…

java实现发送邮件

本文介绍下java实现邮件的发送&#xff0c;意在网站用户评论时能够及时通知站长和用户评论被回复后能够及时通知用户。 下文介绍下具体实现。 java实现 首先引入springboot的邮箱依赖 <dependency><groupId>org.springframework.boot</groupId><artif…