java之Thread类详细分析(全)

2023-10-31

前言

Thread是程序中的执行线程
jvm并发地运行多个执行线程

1. 属性值

通过查看Thread源码,是继承Runnable接口的实现类
无论使用Runnable还是Thread,都会new Thread,然后执行run方法
通过这里也可以知道创建新执行的线程有两种方法

  1. 声明为 Thread 的子类,重写 Thread 类的 run 方法。创建对象,开启线程。run方法相当于其他线程的main方法。
  2. 声明一个实现 Runnable 接口的类,实现run方法,创建对象,开启线程。
public class Thread implements Runnable {
    /* Make sure registerNatives is the first thing <clinit> does. */
    private static native void registerNatives();
    static {
        registerNatives();
    }

    private volatile String name;
    private int priority;

    /* Whether or not the thread is a daemon thread. */
    private boolean daemon = false;

    /* Interrupt state of the thread - read/written directly by JVM */
    private volatile boolean interrupted;

    /* Fields reserved for exclusive use by the JVM */
    private boolean stillborn = false;
    private long eetop;
     /* What will be run. */
    private Runnable target;

    /* The group of this thread */
    private ThreadGroup group;

    /* The context ClassLoader for this thread */
    private ClassLoader contextClassLoader;

    /* The inherited AccessControlContext of this thread */
    private AccessControlContext inheritedAccessControlContext;

    /* For autonumbering anonymous threads. */
    private static int threadInitNumber;

属性值比较多
主要常用的属性代表是

  • name为Thread的名字,通过Thread类的构造函数来指定线程名字
  • priority表示线程的优先级(1-10,越大的数字优先级越高,默认值为5)
  • daemon表示线程是否是守护线程
  • target表示要执行的任务

1.1 线程属性方法

用来得到线程IDgetId
得到线程名称getName
设置线程名称setName
获取线程优先级getPriority
设置线程优先级setPriority
设置线程属性,可为守护线程和判断线程setDaemon
判断是否是守护线程isDaemon

具体的用户线程和守护线程区别
可查看我之前的一篇文章补补细节
【操作系统】线程与进程的深入剖析(全)

2. 常用方法

常用的方法有start、run和sleep方法

  • start方法:使该线程开始执行,jvm开始调用run方法。在该过程中,会为相应的线程分配所需要的资源
  • run方法:该线程要执行的操作,不是用户自身调用,是start的启动后自动调用。如果继承Thread类必须重写run方法,在run方法中定义具体要执行的任务
  • sleep方法:指定毫秒数让当前正在执行的线程休眠,但sleep不会释放锁
    sleep(long millis) //参数为毫秒
    sleep(long millis,int nanoseconds) //第一参数为毫秒,第二个参数为纳秒

3. 使用方法

1. 通过调用自带的线程

Thread mt = new Thread("新的线程!");

//开启新线程
mt.setDaemon();
mt.start();

//在主方法中执行for循环
for (int i = 0; i < 10; i++) {
	System.out.println("main线程!" + i);
}

结果如图所示

在这里插入图片描述
2.通过继承Thread,重写方法

public class MyThread extends Thread {

    //定义指定线程名称的构造方法
    public MyThread(String name) {
        //调用父类的String参数的构造方法,指定线程的名称
        super(name);
        }

        @Override

        public void run() {

            for (int i = 0; i < 10; i++) {

                System.out.println(getName()+":正在执行!"+i);

            }

        }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java之Thread类详细分析(全) 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分

随机推荐

  • IBatis.Net学习笔记六--再谈查询

    在ibatis net学习笔记五 常用的查询方式 中我提到了一些ibatis net中的查询 特别是配置文件的写法 后来通过大家的讨论 特别是anders cui 的提醒 又发现了其他的多表查询的方式 在上一篇文章中我提到了三种方式 都是各
  • 文件下载---txt文件下载

    文件下载系列 文件流下载文件 图片下载 base64下载文件 TXT文件下载 适用场景 1 需求 点击直接下载txt文件 而不是在浏览器中打开新窗口 浏览器可识别txt文件 会直接在新的窗口打开预览文件 2 项目中一般文件是存放在文件服务器
  • 角谱法 matlab,一种基于部分角谱法的快速全息图生成和高质量再现方法与流程...

    本发明涉及一种全息显示领域 特别是全息图的生成和再现方法 背景技术 全息显示能提供给观看者需要的所有信息 因此被公认为最有前景的三维显示技术 但是 目前的全息显示技术依然有一些问题亟待解决 其中之一 角谱法虽然广泛用于计算生成全息图 但是由
  • Java中多线程的同步和互斥

    前言 在多线程编程中 多个线程可能会同时访问和修改共享资源 这就引发了线程安全性问题 如果多个线程在不加协调的情况下同时读写共享资源 就可能导致数据的不一致性 竞态条件和其他错误 为了解决这些问题 我们需要引入线程同步机制 确保多个线程对共
  • module_init 和 late_initcall 区别

    在init h 中有如下定义 define pure initcall fn define initcall 0 fn 1 define core initcall fn define initcall 1 fn 1 define core
  • JavaWeb实现登录注册功能[代码+详解]

    文章目录 前言 一 准备工作 二 sql语句 三 核心代码请求 响应 总结 前言 本次实现用户登录和注册 了解java框架原理 在以后学习java框架时更快上手 完成前需做一些准备工作 一 准备工作 1 创建建数据库表 用来存储编号 用户名
  • 《深入理解计算机系统》(CSAPP)实验三 —— Buf Lab

    这是CSAPP的第三个实验 主要让我们熟悉GDB的使用 理解程序栈帧的结构和缓冲区溢出的原理 实验目的 本实验的目的在于加深对IA 32函数调用规则和栈结构的具体理解 实验的主要内容是对一个可执行程序 bufbomb 实施一系列缓冲区溢出攻
  • eclipse怎样连接mysql_eclipse怎样连接mysql数据库

    展开全部 JDBC连接数据库32313133353236313431303231363533e59b9ee7ad9431333363393630 创建一个以JDBC连接数据库的程序 包含7个步骤 1 加载JDBC驱动程序 在连接数据库之前
  • 什么是扇入和扇出?

    一 扇入和扇出 在软件设计中 扇入和扇出的概念是指应用程序模块之间的层次调用情况 按照结构化设计方法 一个应用程序是由多个功能相对独立的模块所组成 扇入 是指直接调用该模块的上级模块的个数 扇入大表示模块的复用程序高 扇出 是指该模块直接调
  • 蓝桥杯2022年第十三届决赛真题-齿轮

    题目描述 这天 小明在组装齿轮 他一共有 n 个齿轮 第 i 个齿轮的半径为 ri 他需要把这 n 个齿轮按一定顺序从左到右组装起来 这样最左边的齿轮转起来之后 可以传递到最右边的齿轮 并且这些齿轮能够起到提升或者降低转速 角速度 的作用
  • 03-NLP关键技术

    自然语言处理技术四个维度 Semantic 语义 机器学习 情感分析 Syntax 句子结构 句法分析 依存分析 Morphology 单词 单词层面的技术 分词 词性标注 NER命名实体识别 Phonetics 声音 Word Segme
  • vue2.0 实现导航守卫(路由守卫)

    路由跳转前做一些验证 比如登录验证 是网站中的普遍需求 对此 vue route 提供的 beforeRouteUpdate 可以方便地实现导航守卫 navigation guards 导航守卫 navigation guards 这个名字
  • 计算机视觉开发者的新伙伴:Python中的SAM

    计算机视觉开发者的新伙伴 Python中的SAM 计算机视觉是人工智能领域的一个重要分支 它涉及使用计算机和相应的算法来解析和理解图像和视频数据 在计算机视觉开发中 Python是一种广泛使用的编程语言 它提供了许多强大的库和工具 帮助开发
  • react的状态提升

    1 概念理解 在react中是单向数据流的设计 即 只有父组件可以传递数据给子组件 而没有子组件传递数据给父组件的概念 以正确的技术说明 是 拥有者组件 可以设置 被拥有者组件 中的资料 也就是主人与仆人的关系 那么子组件要传递数据给父组件
  • 宝塔 + SSRPanel 前端安装教程

    一 安装宝塔及环境 安装宝塔面板 登录 SSH 后 直接安装宝塔 yum install y wget wget O install sh http download bt cn install install sh sh install
  • 数据库定义语言(DDL)详解

    数据库定义预压 DDL 语言 是重要的语言之一 包含三个关键字 CREATE DROP ALTER 数据库语言都遵循巴科斯范式 其语言规范如下所示 L利用CREATE关键字可以实现定义 定义数据库 定义表 定义索引 定义视图等 常用的是建表
  • LOESS局部加权

    参考资料 1 Matlab中fLOESS函数 https ww2 mathworks cn matlabcentral fileexchange 55407 loess regression smoothing s tid srchtitl
  • node.js 做反向代理

    1 安装http proxy模块 npm install http proxy 2 使用http proxy模块启动代理服务器 导入http模块 var http require http 导入http proxy模块 var httpPr
  • C++设计模式(二)(摘录)

    C 设计模式 二 摘录 装饰模式 装饰模式 动态地给一个对象添加一些额外的功能 它是通过创建一个包装对象 也就是装饰来包裹真实的对象 新增加功能来说 装饰器模式比生产子类更加灵活 以下情形考虑使用装饰模式 需要扩展一个类的功能 或给一个类添
  • java之Thread类详细分析(全)

    目录 前言 1 属性值 1 1 线程属性方法 2 常用方法 3 使用方法 前言 Thread是程序中的执行线程 jvm并发地运行多个执行线程 1 属性值 通过查看Thread源码 是继承Runnable接口的实现类 无论使用Runnable