FTP-网络文件服务器
部署思路
- 单纯上传下载ftp
- 系统集成间的共享 samba
- 网络存储服务器 NFS
网络文件服务器:通过网络共享文件或文件夹,实现数据共享
NAS ( network append storage):共享的是文件夹
- FTP:文件服务器
- samba:不同系统间的文件夹或设备共享
- NFS:网络文件系统
FTP介绍
- FTP (File transfer protocol)是TCP/IP 协议组中的协议之一 ,是一个TCP协议。
- 功能:在服务器与客户端之间进行文件的传输。FTP就是实现两台计算机之间的拷贝。从远程计算机拷贝文件至自己的计算机上,称之为“下载 (download)”文件将文件从自己计算机中拷贝至远程计算机上,则称之为“上传(upload)”文件
- 这个古老的协议使用的是明码传输方式,且过去有相当多的安全危机历史
- 为了更安全的使用 FTP 协议 ,我们主要介绍较为安全但功能较少的 vsftpd(very secure File transfer protocol )这个软件。
- FTP是一个C/S类型的软件,FTP监听TCP端口号为21,数据端口为20
应用场景
- 文件服务器
- 下载服务器
- 上传服务器
FTP应用模式
- FTP支持两种模式,一种方式叫做Standard(也就是 PORT方式,主动方式),一种是 Passive (也就是PASV ,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。 Passive模式FTP的客户端发送 PASV命令到 FTP Server。
- 主动模式:Port模式FTP客户端首先和FTP服务器的TCP21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据,vsftp默认模式。
- 被动模式:Passive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令而是PaSv命令。FTP服务器收到PaSv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。
FTP访问方式
- FTP服务器在默认的情况下,依据使用者登录的情况而分为三种不同的身份,分别是
- 实体账号:本地账户
- 来宾账户: guest
- 匿名登录者 :anonymous ftp
FTP服务器部署
// a、 vsftp安装
yum -y install vsftpd// b、 vsftp开机启动
systemctl enable vsftpd
// Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to/usr/lib/systemd/system/vsftpd.service.// c、启动vsftp服务
systemctl start vsftpd//d、 验证启动
Isof -i :21
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vsftpd 1951 root 4u IPv6 32837 0t0 TCP *:ftp (LISTEN)
相关配置文件
- 主配文件:/etc/vsftpd/vsftpd.conf
- 下载目录:/var/ftp/
- FTP日志:/var/log/xferlog
FTP客户端
FTP相关命令
虚拟用户登陆
案例
为了解决公司员工文件存储和下载的需求。要求部署内部FTP服务器,员工可以通过自己的账
号的权限对FTP进行操作。
- 公司公共文件可以通过圈名下载
- 公司财务部、商务部、行政部、技术部分别拥有自己的部门文件夹,彼此之间相互隔离
- 部门之间只有主管才能拥有上传权限,普通员工只能下载
- 禁止用户查看家目录以外的数据
- 确保ftp账号安全
案例拆解
- FTP需要开启匿名下载 默认FTP支持匿名下载
- 分析针对不同部分实现目录隔离 有两种方法1.同部门共用本地账号2.虚拟账号
- 部门内部员工权限不同 实现方法 虚拟账号
- 禁止用户切出 chroot
- 防止本地账号泄露 虚拟账号
部署步骤
- 创建虚拟用户映射的本地账号
创建虚拟用户映射的本地账号
useradd -s /sbin/nologin -d /var/tmp/vuser_ftp yudan
新版vsftpd不允许用户主目录有w权限,因此在主目录下新建一个子目录,赋予700权限。所有上传、下载、删除、重命名等操作只能在子目录中进行
chmod 500 /var/tmp/vuser_ftp设置不同部门之间的根文件夹,给予700权限
mkdir /var/tmp/vuser _ftp/shichang
mkdir /var/tmp/vuser _ftp/caiwu
mkdir /var/tmp/vuser _ftp/xingzheng
mkdir /var/tmp/vuser _ftp/jishu
chmod 700 /var/tmp/vuser_ftp/*修改部门共享文件夹的所有者和属组为yudan
chown yudan.yudan /var/tmp/vuser_ftp -R
- 配置文件开启虚拟用户验证
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect _from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
Is_recurse_enable=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_usemame=ayitula
virtual_use_local_privs=NO
user_config_dir=/etc/vsftpd/vconf.d/
- 建立虚拟用户验证数据库
建立虚拟用户账号密码文件
cat /etc/vsftpd/vuser
sc_01
123
xZ_01
123
js_01
123
cw_01
123
SC_02
222
xz_02
222
js_02
222
cw_02
222生成账号密码数据库文件
db _load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db
chmod 600 /etc/vsftpd/vuser.db
- 开启pam认证
cat /etc/pam.d/vsftpd
#注意要添加到开头
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
#% PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
- 设置不同部门员工的权限
建立部门员工子配置文件,用于定义权限
mkdir /etc/vsftpd/vconf.d/定义虚拟用户权限
部门主管有管理权限
主管模板文件
cat /etc/vsftpd/vconf.d/01_temp
#指定家目录
local_root=/var/tmp/vuser_ftp/xxx
#允许新建文件或目录权限
anon_umask=077
#开放下载权限
anon_world_readable_only=NO
#开放上传权限
anon_upload_enable=YES
#开放创建目录的权限
anon_mkdir_write_enable=YES
#开放删除和重命名目录的权限
anon other write enable=YES部门员工只有下载权限
部门员工模板文件
cat /etc/vsftpd/vconf.d/02_temp
local_root=/var/tmp/vuser_ftp/xxx
anon_ world_readable_only=NO
相关文章:
FTP-网络文件服务器
部署思路 单纯上传下载ftp系统集成间的共享 samba网络存储服务器 NFS 网络文件服务器:通过网络共享文件或文件夹,实现数据共享 NAS ( network append storage):共享的是文件夹 FTP:文件服务器samba:不同系统间的文件…...
嵌入式RTOS实战:uC/OS-III最新版移植指南(附项目源码)
文章目录 前言一、uC/OS简介二、工程移植2.1 下载ucos源码2.2 创建空白工程2.3 拷贝ucosiii源码文件2.3.1 UC-CONFIG2.3.2 UC-CPU2.3.3 UC-LIB2.3.4 UC-OS3 2.3 添加工程文件分组及路径2.4 代码首次编译2.5 源码修改2.5.1 cpu_cfg.h2.5.2 os_cpu_c.c2.5.3 lib_cfg.h2.5.4 sys.h…...
10.Excel:快速定位目标值
一 批量删除 1.如何使用 快捷键 CTRLG 补充:直接选择定位条件。 2.作用 1.批量删除工作表中的图片 补充:无法通过框选的方式选中这些图片进行删除。 这样只框选了表格,无法框选图片。因为图片在excel中被认为是一个对象,对象无法通…...
状态模式 (State Pattern)
状态模式(State Pattern)是一种行为型设计模式,它允许对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。该模式将状态封装成独立的类,并将请求委托给当前的状态对象,当对象的内部状态发生变化时,其行为也会随之改变。 一、基础部分 1. 意图 允许一个…...
【Java面试题04】MySQL 篇
文章目录 一、前言🚀🚀🚀二、MySQL 篇:☀️☀️☀️1、MySQL 是如何实现事务的? 后序还在更新中~~~三、总结:🍓🍓🍓 一、前言🚀🚀🚀 ☀️ 你每一…...
同时安装多个版本的golang
https://golang.google.cn/dl/ go install golang.org/dl/go1.20latest 这样就会将 go1.20.exe 下载到 GOPATH/bin,但是此时并没有 go1.20 的源码包,也就不能正常执行 build/run 等指令。 然后执行 go1.20 download下载源码包 > go1.20 download …...
【Web应用服务器_Tomcat】三、Tomcat 性能优化与监控诊断
在企业级 Java Web 应用的运行过程中,Apache Tomcat 作为广泛使用的 Servlet 容器和 Web 服务器,其性能表现直接影响用户体验和业务稳定性。本篇文章将深入探讨 Tomcat 性能优化的实用技巧,以及如何通过有效的监控诊断手段,及时发…...
stm32week13
stm32学习 九.stm32与HAL库 4.时钟树 stm32f103所拥有的时钟源: 外部时钟的稳定性比内部的高,但是成本高,需要在外部额外接 关于上述时钟树的简图: 右下四个是HAL库中的初始化函数 F4的时钟树简图: F7的时钟树简图…...
深入探究C++ 中的stack、queue和deque
目录 一、stack(栈) 二、queue(队列) 三、deque(双向队列) 四、容器适配器总结 在C 的标准模板库(STL)中,stack、queue和priority_queue是非常实用的容器适配器&…...
第十二节:性能优化高频题-shallowRef/shallowReactive使用场景
适用场景:大型对象/列表仅需第一层响应式变化(如JSON配置数据) Vue3 浅层响应式 API(shallowRef/shallowReactive)使用场景深度解析 一、核心使用场景与性能优化原理 大型 JSON 配置数据管理 • 场景特征:…...
openGauss DB4AI与scikit-learn模块对比探究
openGauss当前版本支持了原生DB4AI能力,引入原生AI算子,简化操作流程,充分利用数据库优化器、执行器的优化与执行能力,获得高性能的数据库内模型训练能力。 本文介绍了笔者采用鸢尾花数据集,对openGauss DB4AI功能进行…...
基于大模型的公安预审办案笔录分析的挑战与应对策略-3
引言 :在基于大模型的公安预审办案笔录分析应用过程中,虽然取得了一定的成果,但也面临着诸多挑战。本文将分析这些挑战,并提出相应的应对策略,以推动该技术在公安领域的更好地发展和应用。 引文:https://c…...
ubantu18.04(Hadoop3.1.3)之Flink安装与编程实践(Flink1.9.1)
说明:本文图片较多,耐心等待加载。(建议用电脑) 注意所有打开的文件都要记得保存。 第一步:准备工作 本文是在之前Hadoop搭建完集群环境后继续进行的,因此需要读者完成我之前教程的所有操作。 注意本次实…...
AI辅助编程-cursor开发煤矿持证上岗管理程序需求与设计篇
Cursor 是一款由人工智能驱动的智能代码编辑器,深度融合AI技术以提升开发效率。其核心功能基于GPT-4等先进模型,支持代码生成、错误修复、智能补全及自然语言编程。开发者可通过对话交互直接描述需求,AI即时生成对应代码片段,显…...
如何使用极狐GitLab 议题看板?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 议题看板 (BASIC ALL) 议题看板是一个软件项目管理工具,用于计划、组织和可视化功能或产品发布的工作流程。它可…...
计网分层体系结构(包括OSI,IP,两者对比和相关概念)
1. 应用层: 用户与网络的界面,FTP,SMTP, HTTP 2. 表示层(Presentation Layer): 解决用户信息的语法表示问题 数据压缩,加密解密 表示变换 3. 对话层(Session Layer): 功能:允许不同主机的各个进…...
爬虫过程中如何确保数据准确性
在爬虫过程中,确保数据的准确性是非常重要的。数据不准确可能会导致分析结果的偏差,甚至影响决策。以下是一些确保爬虫数据准确性的方法和技巧: 一、验证数据来源 确保数据来源的可靠性是确保数据准确性的第一步。选择信誉良好的网站作为数…...
Maven多模块工程版本管理:flatten-maven-plugin扁平化POM
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
数据库基础与核心操作:从概念到实战的全面解析
目录 1 基本概念2 基本操作2.1 DCL2.2 DDL2.3 DML2.4 DQL(高级查询) 3 高级功能3.1 视图(无参函数)3.2 存储过程(有参函数)3.3 触发器 4 约束4.1 主键约束4.2 UNIQUE KEY(唯一键约束)4.3 FOREIGN KEY(外键约束…...
网络原理 - 10(HTTP/HTTPS - 1)
前面的网络原理 1 - 9,按照 TCP/IP 五层协议栈,介绍了各个层次的核心协议。 应用层:自定义协议(xml,json....) 传输层:UDP/TCP 网络层:IP 数据链路层:以太网 我们这…...
UDP协议详解+代码演示
1、UDP协议基础 1. UDP是什么? UDP(User Datagram Protocol,用户数据报协议)是传输层的核心协议之一,与TCP并列。它的主要特点是: 无连接:通信前不需要建立连接(知道对端的…...
QT事件Trick
拖动 void DWidget::mousePressEvent(QMouseEvent *event) {if(event->button()Qt::LeftButton){QListWidgetItem *selItem currentItem();if(selItem! nullptr){m_startPosevent->pos(); //记录鼠标按下时的起始位置}}QListWidget::mousePressEvent(event); }void DW…...
解答UnityShader学习过程中的一些疑惑(持续更新中)
一、坐标系相关 shader中会有几种空间: 模型空间:以物体自己为中心原点 世界空间:就是unity的世界坐标 观察空间(视图空间):以相机为中心的坐标系 裁剪空间:是一个4d空间,有x,y,z,w…...
【图论 拓扑排序 bfs】P6037 Ryoku 的探索|普及+
本文涉及知识点 C图论 CBFS算法 P6037 Ryoku 的探索 题目背景 Ryoku 对自己所处的世界充满了好奇,她希望能够在她「死」之前尽可能能多地探索世界。 这一天,Ryoku 得到了一张这个世界的地图,她十分高兴。然而,Ryoku 并不知道…...
Spring Boot定时任务
在 Spring Boot 中实现定时任务主要依赖于Scheduled注解和 Spring 调度器。 基本概念 定时任务,简单来说就是在特定的时间点或按照一定的时间间隔自动执行的任务。在 Spring Boot 中,实现定时任务主要依赖于 Spring 框架提供的 Scheduled 注解和 TaskSc…...
如何使用electron-forge开发上位机ui
Electron Forge是一个用于快速构建、打包和发布Electron应用程序的工具。它提供了一种简单的方式来设置Electron项目,并使用现代工具和最佳实践来管理应用程序的开发和部署过程。使用Electron Forge,开发人员可以轻松地创建跨平台的桌面应用程序…...
idea启动springboot方式及web调用
使用以下方式启动springboot. 我这里是微服务, 本地调试需要启动程序使用 1. 通过maven检测到Profile配置 2. web调用 我这里直接用 apifox接口调用, 带着token和一些必要参数。有这几点: 请求头要加的token需要是网页上F12获取到的 如果是微服务本地调用。url需要…...
利用EMQX实现单片机和PyQt的数据MQTT互联
https://www.dong-blog.fun/post/2050 基于MQTT的设备监控与控制系统设计 引言 物联网(IoT)设备的远程监控与控制是现代智能系统的基础需求。本文将介绍一个基于MQTT协议的设备监控与控制系统,该系统由两部分组成:模拟单片机设备和PyQt客户端。我们将…...
C#/.NET/.NET Core技术前沿周刊 | 第 36 期(2025年4.21-4.27)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿、推荐…...
Context7 MCP:提供实时、版本特定的文档以解决AI幻觉问题
在实际开发中,使用AI辅助编码常常出现令人沮丧的问题:AI提供的API调用建议往往已经过时,或者根本不存在。 特别是当您使用最新版库时,这个问题尤为明显。 Upstash团队开发的Context7开源工具正是为解决这一痛点而生。 版本不匹配导致的API错误 现代开发库迭代速度快,常…...
电路研究9.3.2——合宙Air780EP中的AT开发指南:HTTP(S)-PDP的研究
按照推荐的GPRS模块的学习顺序,现在需要研究的是HTTP(S)了,所以我们就继续学习吧。 9.5.2 HTTP(S)应用指南 应用概述 4G 模块支持 HTTP 和 HTTPS 协议(这个确实也考虑过了,但是不知道合不合适呢,而且我们计划的通讯是只…...
K8S ConfigMap 快速开始
一、什么是 ConfigMap? ConfigMap 是 Kubernetes 中用于存储非敏感配置数据的 API 对象,支持以键值对(Key-Value)或文件的形式存储配置,允许将配置与镜像解耦,实现配置的集中管理和动态更新。 二、主要用…...
【星海出品】K8S调度器leader
发现K8S的技术资料越写越多,独立阐述一下K8S-Scheduler-leader 调度器通过Watch机制来发现集群中【新创建】且尚未被调度【unscheduled】到节点上的pod。 由于 Pod 中的容器和 Pod 本身可能有不同的要求,调度程序会过滤掉任何不满足 Pod 特定调度需求的…...
第十二届蓝桥杯 2021 C/C++组 空间
目录 题目: 题目描述: 题目链接: 思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: 空间 - 蓝桥云课 思路: 思路详解&#…...
通过深度学习推进增材制造:当前进展与未来挑战综述
通过深度学习推进增材制造:当前进展与未来挑战综述 原文信息: 标题:Advancing Additive Manufacturing through Deep Learning: A Comprehensive Review of Current Progress and Future Challenges 作者:Amirul Islam Saimon, Emmanuel Yangue, Xiaowei Yue, Zhenyu (…...
深入蜂窝物联网 第三章 LTE-M(Cat-M1)详解:省电机制与移动特性
1. 前言与应用场景 在蜂窝物联网阵营中,LTE-M(Cat-M1) 兼具低功耗和中速率,且支持移动场景下的无缝切换,因而成为物流追踪、可穿戴设备、智能路灯、共享单车等场景的首选。 本章将系统剖析: 核心特性:PSM、eDRX 与移动性保障; 协议流程:简化的 RRC/NAS 步骤; 时序图…...
软件设计师速通其一:计算机内部数据表示
考试资料推荐 ,这也是大部分图片的出处。本文章主要将视频原本讲的不详细、不便于理解的东西摆开揉碎了给到读者。相信本文能帮您更好更快的学习知识。本文也是您考前快速复习的不二之选。本文会用星星来表示每个考点的重要性,其中一颗★表示课外拓展&am…...
Kubernetes》》k8s》》Taint 污点、Toleration容忍度
污点 》》 节点上 容忍度 》》 Pod上 在K8S中,如果Pod能容忍某个节点上的污点,那么Pod就可以调度到该节点。如果不能容忍,那就无法调度到该节点。 污点和容忍度的概念 》》污点等级——>node 》》容忍度 —>pod Equal——>一种是等…...
【爬虫】一文掌握 adb 的各种指令(adb备忘清单)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 入门设备基础Logcat文件管理远程 Shell包安装Paths手机信息包信息设备相关命令权限Logs常见的 ADB 命令将文件推送到 Android 设备的下载文件夹列出所有已安装的包并获取完整路径从安卓设备中提取文件从主机安装 APK 到…...
1.7无穷级数
引言 无穷级数是考研数学一的核心内容,涵盖数项级数、幂级数、傅里叶级数等核心概念。本文系统梳理4大考点,结合公式速查与实战示例,助你高效突破级数难点! 考点一:数项级数敛散性判定 1️⃣ 正项级数 (1) 比较审敛…...
vitest | 测试框架vitest | 总结笔记
测试框架 vitest 介绍 网址:Vitest | Next Generation testing framework 特点:①支持vite的生态系统,②兼容jest语法 ③HMR测试(速度快) ④ ESM(js的原生支持) 安装 Vitest: npm …...
使用 ELK 实现全链路追踪:从零到一的实践指南
前言 在现代分布式系统中,随着服务数量的增加,系统的复杂性也呈指数级增长。为了快速定位问题、分析性能瓶颈,全链路追踪成为一项必不可少的能力。本文将详细介绍如何利用 ELK(Elasticsearch Logstash Kibana) 实现…...
AI智能体开发实战:从概念到落地的全流程解析
一、AI智能体:重新定义人机协作 什么是AI智能体? AI智能体是具备感知-思考-行动闭环能力的程序实体,能够通过传感器(如文本输入、图像识别)获取信息,基于大模型推理决策,并通过API、机器人等执…...
如何搭建spark yarn 模式的集群
搭建Spark on YARN集群的步骤 Spark on YARN模式允许Spark作业在Hadoop YARN资源管理器上运行,这样可以更好地与Hadoop生态系统集成并共享集群资源。以下是搭建Spark YARN集群的详细步骤: 前提条件 已安装并配置好Hadoop集群(包括HDFS和YAR…...
DDoS 攻击如何防护?2025最新防御方案与实战指南
一、DDoS 攻击的致命威胁:你的业务离瘫痪有多近? 1. 2024 年 DDoS 攻击现状 攻击规模:全球日均攻击峰值突破7.2Tbps,混合型攻击占比超 65%(来源:Cloudflare)行业重灾区: 行业攻击占…...
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目
安装 pnpm install icraft/player-react --saveimport { ICraftPlayer } from "icraft/player-react";export default function MyScene() {return <ICraftPlayer srcyour-scene.iplayer />; }icraft/player-react 为开发者提供了一站式的3D数字孪生可视化解决…...
esm使用-包括esmfold和embedding
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言零、安装一、esmfold的使用二、esm2的embedding1.模型加载与准备2.读入数据3.提取残基级表示4.生成序列级表示(均值池化)5.可视化自注意力接触图6.潜在问题与改进建议7.小结总结前言 主要参…...
【Nginx】 使用least_conn负载均衡算法是否能将客户端的长连接分散到不同的服务器上demo
为了验证Nginx在关闭HTTP Keepalive的情况下,使用least_conn负载均衡算法是否能将客户端的长连接分散到不同的服务器上,我们可以搭建一个简单的环境。这个环境包括: 一个Nginx服务器作为负载均衡器。两个后端服务器(可以使用简单…...
TMI投稿指南(三):共同作者
IEEE 作者编辑风格手册 --- IEEE Editorial Style Manual for Authors 投稿之后检查路径: IEEE 作者门户:登录 --- IEEE Author Gateway: Login 共同第一作者:在许多领域,被视为成为第一作者是件好事。但只有一个人可以是第一作…...
Java多线程入门案例详解:继承Thread类实现线程
本文通过一个简单案例,讲解如何通过继承 Thread 类来实现多线程程序,并详细分析了代码结构与运行机制。 一、前言 在 Java 中,实现多线程主要有两种方式: 继承 Thread 类 实现 Runnable 接口 本文以继承 Thread 类为例&#x…...