Java-线程线程的创建方式

一.进程和线程

进程:进程是资源分配的基本单位,每个进程都有自己独立的内存空间,可以看作是一个正在运行的程序实例

线程:线程是CPU调度的基本单位,属于进程,一个进程可以包含多个线程。线程共享进程的内存空间和资源,但每个线程有自己独立的栈和寄存器

多进程:在操作系统中,同时运行多个程序

多进程的好处:可以充分利用CPU,提高CPU的使用率

多线程:在同一个进程(应用程序)中同时执行多个线程

多线程的好处:提高进程的执行使用率,提高了CPU的使用率

注意:

  1. 在同一个时间点一个CPU中只可能有一个线程在执行

  2. 多线程不能提高效率、反而会降低效率,但是可以提高CPU的使用率

  3. 一个进程如果有多条执行路径,则称为多线程程序

  4. Java虚拟机的启动至少开启了两条线程,主线程和垃圾回收线程

  5. 一个线程可以理解为进程的子任务

二.线程的实现方式

1.继承Thread类

注意:

  1. 启动线程是使用start方法而不是run方法

  2. 线程不能启动多次,如果要创建多个线程,那么就需要创建多个Thread对象

class MyThread extends Thread {@Overridepublic void run() {System.out.println("Thread running by extending Thread class");}
}public class Main {public static void main(String[] args) {MyThread thread = new MyThread();thread.start();}
}

2.实现Runable接口

实现Runable接口的好处:

  1. 可以避免Java单继承带来的局限性

  2. 适合多个相同的程序代码处理同一个资源的情况,把线程同程序的代码和数据有效的分离,在实现解耦的同时,较好的体现了面向对象的设计思想

class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("Thread running by implementing Runnable interface");}
}public class Main {public static void main(String[] args) {Thread thread = new Thread(new MyRunnable());thread.start();}
}

3.实现Callable接口

前面两种方式都是重写run方法,而run方法没有返回结果,也不能抛出异常,main方法不知道线程什么时候开启和结束,也不知道返回值。

所以在jdk1.5引入实现Callable接口的方式创建线程,即可以获取返回值,也可以抛出异常

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;class MyCallable implements Callable<String> {@Overridepublic String call() throws Exception {return "Thread running by implementing Callable interface";}
}public class Main {public static void main(String[] args) throws Exception {FutureTask<String> futureTask = new FutureTask<>(new MyCallable());Thread thread = new Thread(futureTask);thread.start();System.out.println(futureTask.get());}
}

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

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

相关文章

Electron 中 license-keys 的完整集成方案

secure-electron-license-keys 是一个专门为 Electron 应用设计的 npm 包&#xff0c;用于实现离线许可证密钥的创建、验证和管理&#xff0c;帮助开发者保护应用程序&#xff0c;确保只有拥有合法许可证的用户才能使用。以下是关于它的详细介绍&#xff1a; 在 Electron 应用中…

AI推理的“灵魂五问”:直面2025算力鸿沟与中国的破局之路

摘要&#xff1a;2025年&#xff0c;AI产业的重心已从训练全面转向推理&#xff0c;但一场严峻的“体验”危机正悄然上演。中美AI推理性能的巨大鸿沟&#xff0c;正让国内厂商面临用户流失的切肤之痛。本文以问答形式&#xff0c;直面当前中国AI产业在推理“最后一公里”上最尖…

2025 TexLive+VScode排版IEEE TGRS论文

2025 TexLiveVScode排版IEEE TGRS论文 本文主要内容&#xff1a; 软件安装 latex 排版 TRGS 论文期间遇到的问题 清晰图片导出 Latex公式、图、表、算法、参考文献的使用和引用 1. 前言 首先使用Overleaf网页版排版&#xff0c;但是后期排版图片太大&#xff0c;大小有限制&…

Redis数据组织方式

前言 Redis之所以高效&#xff0c;源自其优秀的架构设计。作为KV键值对存储数据库&#xff0c;数据的存储放在了内存中&#xff0c;KV键值对的组织方式更是其高效的原因之一。本文介绍其数据组织方式。 一、总体架构 在使用Redis时&#xff0c;服务端接收多个客户端的命令进行…

java组件安全vulhub靶场

>1--XStream1.打开靶场cd vulhub-master/xstream/CVE-2021-29505 docker up -d2.下载反序列化工具https://github.com/frohoff/ysoserial可以使用clone命令进行下载&#xff0c;也可以直接下载jar文件3.使用以下命令来开启脚本&#xff0c;将是反弹shell的语句进行base64编码…

UCMT部分复现

复现结果&#xff1a;88.03272&#xff0c;误差在接受范围内 补充信息 作者未解决后续报错问题&#xff0c;不建议复现

IntelliJ IDEA 新手全方位使用指南

摘要本文面向刚接触软件开发、使用 IntelliJ IDEA 的新手&#xff0c;详细介绍了 IDEA 的背景、版本区别、核心功能、运行原理、界面操作、项目管理、运行配置、以及 Git 版本控制基础。文章突出实用操作和理解流程&#xff0c;帮助新手快速熟悉IDEA环境&#xff0c;顺利完成项…

Python如何将图片转换为PDF格式

引言 在日常工作和学习中&#xff0c;我们经常需要将多张图片合并成一个PDF文件&#xff0c;以便于分享或打印。Python提供了多种库来实现这一需求&#xff0c;本文将详细介绍三种常用的方法&#xff1a;img2pdf库、Pillow库和PyMuPDF库&#xff0c;并附上完整的代码示例。 方法…

Python如何合并两个Excel文件

引言 在日常数据处理中&#xff0c;合并Excel文件是常见需求。Python提供了多种库&#xff08;如pandas、openpyxl&#xff09;来实现这一操作。本文将详细介绍两种主流方法&#xff0c;并附上完整代码示例&#xff0c;帮助您高效完成Excel合并任务。 方法一&#xff1a;使用pa…

【SQL进阶】用EXPLAIN看透SQL执行计划:从“盲写“到“精准优化“

用EXPLAIN洞察SQL执行计划&#xff1a;从"盲目编写"到"精准优化" 很多开发者在编写SQL时仅凭直觉&#xff0c;直到查询超时才发现问题。MySQL内置的EXPLAIN工具能提前揭示查询执行逻辑&#xff0c;帮助预防性能隐患。本文将带你掌握EXPLAIN的核心用法&…

电影艺术好,电影知识得学

关于电影应该谈什么导演风格、演员技术、剧本结构、票房、政治因素等。一、纸上谈电影电影制作期&#xff1a;研发、前制、拍摄、后制、发行。一般成员只在某个时期出现。制片和导演会从头监督到尾。研发期&#xff1a; 剧本概念发想与成形的时期。创作自由度比较大&#xff0c…

FPGA学习笔记——简易的DDS信号发生器

目录 一、任务 二、分析 三、ROM IP核配置 四、Visio图 五、代码 &#xff08;1&#xff09;.v代码 &#xff08;2&#xff09;仿真代码 六、仿真 七、实验现象 一、任务 用串口模块&#xff0c;用上位机发送指令&#xff0c;FPGA接收&#xff0c;然后输出对应的波形&…

在NVIDIA Orin上用TensorRT对YOLO12进行多路加速并行推理时内存泄漏 (中)

接上篇 在NVIDIA Orin上用TensorRT对YOLO12进行多路加速并行推理时内存泄漏&#xff08;上&#xff09; 通过上篇的分析&#xff0c;发现问题在采集数据到传入GPU之前的阶段。但随着新一轮长时间测试发现&#xff0c;问题依然存在。 如上图&#xff0c;在运行20多分钟内存开始…

计数组合学7.17(Murnaghan–Nakayama 规则 )

7.17 Murnaghan–Nakayama 规则 我们已经成功地用基 mλm_\lambdamλ​、hλh_\lambdahλ​ 和 eλe_\lambdaeλ​ 表示了 Schur 函数 sλs_\lambdasλ​。本节我们将考虑幂和对称函数 pλp_\lambdapλ​。一个斜分划 λ/μ\lambda / \muλ/μ 是连通的&#xff0c;如果其分拆图…

使用 jlink 构建轻巧的自定义JRE

从 JDK 9 开始&#xff0c;Oracle JDK 和 OpenJDK 不再默认包含独立的 JRE 目录&#xff0c;而是提供了 jlink 工具&#xff08;Java 链接器&#xff09;&#xff0c;允许你根据需求自定义生成最小化的 JRE&#xff08;包含必要的模块&#xff09;。以下是使用 jlink 生成 JRE …

[IOMMU]面向芯片/SoC验证工程的IOMMU全景速览

面向芯片/SoC验证工程的IOMMU全景速览 摘要:面向芯片/SoC 验证工程的 IOMMU 全景速览:包含基础概念、主流架构要点(ARM SMMU、Intel VT‑d、RISC‑V IOMMU),Linux 软件栈关系,SoC 上的验证方法(功能、错误、性能、系统化流程和覆盖),以及一个可用的“通用 IOMM…

Jenkins全链路教程——Jenkins用户权限矩阵配置

在企业级CI/CD场景中&#xff0c;“权限混乱”往往比“构建失败”更致命——测试员误删生产流水线、实习生修改关键插件配置、多团队共用账号导致责任无法追溯……这些问题&#xff0c;99%都能用权限矩阵彻底解决&#xff01;今天&#xff0c;我们不仅会拆解权限矩阵的底层逻辑…

库函数蜂鸣器的使用(STC8)

使用库函数控制蜂鸣器&#xff08;STC8&#xff09; 在STC8系列单片机中&#xff0c;可以通过库函数或直接操作寄存器来控制蜂鸣器。以下是基于STC8库函数的常用方法&#xff1a; GPIO板蜂鸣器 #include "GPIO.h" #include "Delay.h"void GPIO_config()…

redis8.0.3部署于mac

macOS11因版本过低&#xff0c;安装redis时&#xff0c;Homebrew和源码编译两种方式都无法成功。将操作系统升级至macOS15再安装。Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据库&#xff0c;遵守 BSD 协议&#xff0c;它提供了一个高性能的键值…

【和春笋一起学C++】(三十三)名称空间的其他特性

目录 嵌套式名称空间 拓展——未命名的名称空间 嵌套式名称空间 示例代码1&#xff1a; namespace electronicEquipment {namespace computer{double price 4999.0;string modelNumber;string name;}namespace ElectronicWatch{double price 99.0;string modelNumber;stri…