【Java中的Thread线程的简单方法介绍和使用详细分析】

news2024/10/3 2:23:21

文章目录

  • 前言
  • 一、run() 和 start() 方法
  • 二、sleep() 方法
  • 三、join() 方法
  • 总结


前言

提示:若对Thread没有基本的了解,可以先阅读以下文章,同时部分的方法已经在如下两篇文章中介绍过了,本文不再重复介绍!!

  • 【Java中Tread和Runnable创建新的线程的使用方法】

  • 【Java中的Thread线程的七种属性的使用和分析】


提示:以下是本篇文章正文内容,下面案例可供参考

一、run() 和 start() 方法

在这里插入图片描述

在这里插入图片描述

代码示例 1

public class Ceshi {
    public static void main(String[] args) {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello world");
            }
        });
        t.run();
        System.out.println(t.isAlive());
        System.out.println(t.getState());
    }
}

输出结果

在这里插入图片描述

代码示例 2

public class Ceshi {
    public static void main(String[] args) {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello world");
            }
        });
        t.start();
        System.out.println(t.isAlive());
        System.out.println(t.getState());
    }
}

输出结果

在这里插入图片描述

由此看出:

  1. t.run()这条语句能够调用run()方法,但是没有启动线程,线程仍然处于NEW的状态,并没有启动线程,只是调用了一次run()方法。
  2. t.start()这条语句同样能够调用run()方法,但是它真正的启动t线程,线程处于RUNNABLE的状态,然后t线程调用了run()方法

二、sleep() 方法

在这里插入图片描述

代码示例

public class Ceshi {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            System.out.println("工作中");
        });
        t1.start();
        //该方法为静态方法,直接使用类名调用
        Thread.sleep(3000);//main线程休眠3秒后,才能继续执行下面的语句
        System.out.println();
        System.out.println("耗时三秒,工作完成");
    }
}

输出结果

在这里插入图片描述

结论

  1. 该方法写在那个线程里,就会使哪个线程休眠规定的时间,其他的线程不受影响。
  2. public static void sleep(long millis, int nanos)休眠millis毫秒后,再休眠nanos纳秒(范围:0-999999纳秒)
  3. 因为线程的调度是不可控的,所以这个方法只能保证实际休眠时间是大于等于参数设置的休眠时间的。

三、join() 方法

在这里插入图片描述

代码示例

public class Ceshi {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            System.out.println("工作一需要3秒");
            try {
                Thread.sleep(4000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        Thread t2 = new Thread(() -> {
            System.out.println("工作一已完成,开始工作二");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        Thread t3 = new Thread(() -> {
            System.out.println("工作二已完成,开始工作三");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        Thread t4 = new Thread(() -> {
            System.out.println("工作三已完成,开始工作四");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        //在main线程中调用t.join(),就是让main线程等待t线程执行结束(保证t先结束)
        t1.start();
        t1.join();//t1的任务不结束,不会执行下面的语句

        t2.start();
        t2.join();//t2不结束,不继续进行

        t3.start();
        t3.join();//同理

        t4.start();
        t4.join();//同理
    }
}

输出结果

在这里插入图片描述

结论

  1. 有时,我们需要等待一个线程完成它的工作后,才能进行自己的下一步工作。该方法能够保证线程的任务有序执行,不会发生抢占式的进行。
  2. 同时还有带参数的重载方法,public void join(long millis) 等待线程结束,最多等millis毫秒,public void join(long millis, int nanos),在millis毫秒的基础上再加上nanos纳秒(范围:0-999999纳秒)

总结

除了以上常用的方法,还有许多的方法在前言中的文章已经详细介绍和使用,如若该文中没有找到你需要的,请跳转到前言的链接

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

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

相关文章

海量遥感数据处理与云计算技术教程

详情点击链接:海量遥感数据处理与GEE云计算技术 一,GEE及开发平台 1.GEE平台及典型应用; 2.GEE JavaScript开发环境及常用数据资源; 3.JavaScript基础,包括变量,运算符,数组,判断及…

【数据结构和算法15】二叉树的实现

二叉树是这么一种树状结构:每个节点最多有两个孩子,左孩子和右孩子 重要的二叉树结构 完全二叉树(complete binary tree)是一种二叉树结构,除最后一层以外,每一层都必须填满,填充时要遵从先左后…

程序员千万别碰这3种副业!!!

最近,“消费降级”这个词频频被大家提及,某瓣上,“今天消费降级了吗”小组的常驻人口有36万,某书上,跟消费降级有关的笔记近7万条...... 不少网友晒出了自己消费降级后的生活:由从前每天一杯的星巴克变成了…

ROS noetic,ROS melodic 安装 MoveIt 并运行

ROS noetic,ROS melodic 安装 MoveIt 并运行 前言更新功能包版本下载依赖文件创建工作区和软件源下载源代码安装编译器缓存(可选环节)编译Moveit!安装Moveit!检测是否安装成功 前言 在安装过程中我也碰壁过很多次&…

[算法通关村] 1.3 链表的删除

上一节我们谈到了链表的头插、尾插、中间插入的方法,忘记的小伙伴可以复习一下: [算法通关村] 1.2 链表的插入 接下来,完成链表的删除工作,我们在上一节的学习中,分别在链表的开头、中间和结尾插入了节点,…

【USACO OPEN12铜组】岛屿

【USACO OPEN12铜组】岛屿 文章目录 【USACO OPEN12铜组】岛屿题目描述输入格式输出格式数据范围输入样例:输出样例: 思路code 2014. 岛 - AcWing题库 题目描述 每当下雨时,农夫约翰的田地总是被洪水淹没。 由于田地不是完全水平的&#xf…

Cesium态势标绘专题-扇形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

(五)FLUX中的数据类型

以下内容来自 尚硅谷,写这一系列的文章,主要是为了方便后续自己的查看,不用带着个PDF找来找去的,太麻烦! 第 5 章 FLUX中的数据类型 5.1 10 个基本数据类型 5.1.1 Boolean (布尔型) 5.1.1.1 …

Pytorch学习笔记 | 利用线性回归实现最简单的梯度下降 | 含代码和数据

代码 import torch import numpy as np import matplotlib.pyplot as plt import pandas as pddef make_linear_regression_data():x = np.linspace(start=10

IIC通讯故障纠错一例

1.问题描述 IIC在既有的工作中,用来协调两个外围芯片。一个芯片扩展IO,一个处理显示。仔细核对了IIC的种种配置,并且最终测量了输出的时钟和数据波形,最终的时钟线波形是这样的: 单片机master模式,输出前面…

ES6基础知识八:你是怎么理解ES6中Proxy的?使用场景?

一、介绍 定义: 用于定义基本操作的自定义行为 本质: 修改的是程序默认形为,就形同于在编程语言层面上做修改,属于元编程(meta programming) 元编程(Metaprogramming,又译超编程,是指某类计算…

【Java练习题汇总】《第一行代码JAVA》异常处理篇,汇总Java练习题——异常的概念及处理标准格式(try、catch、finally、throws、throw)、断言机制 Assertion ~

Java练习题 异常处理篇 1️⃣ 异常处理篇 1️⃣ 异常处理篇 一、填空题 Throwable 下的两个子类是______________ 、______________ 。ArthmeticException 类表示______________ 异常, ArraysIndexOutOfBoundsException 表示______________ 异常。一个 try 代码后…

Linux内核提权漏洞(Dirty-pipe)复现

前言:CVE-2022-0847 是存在于 Linux内核 5.8 及之后版本中的本地提权漏洞。攻击者通过利用此漏洞,可覆盖重写任意可读文件中的数据,从而可将普通权限的用户提升到特权 root。 CVE-2022-0847 的漏洞原理类似于 CVE-2016-5195 脏牛漏洞&#xf…

Vue入门项目——WebApi

Vue入门——WebApi vue3项目搭建组合式API响应式APIreactive()ref() 生命周期钩子computed计算属性函数watch监听函数父子通信模板引用组合选项 vue3项目搭建 简单看下Vue3的优势吧 下载安装npm及node.js16.0以上版本(确保安装成功可用如下代码检查版本&#xff0…

YOLOX-PAI 论文学习

1. 解决了什么问题? 对 YOLOX 做加速,在单张 Tesla V100 上取得了 42.8 42.8 42.8mAP,推理速度为 1 毫秒。 2. 提出了什么方法? 2.1 主干网络 YOLOv6 和 PP-YOLOE 都将主干网络从 CSPNet 切换到了 RepVGG。RepVGG 在推理时&a…

PHP在线相册--【强撸项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 上效果图phpStudy 设置导数据库项目目录如图:代码部分:主页 配套资源作业: 本系列校训 用免费公开视频,卷飞培训班哈人&…

【深度学习】【Image Inpainting】Free-Form Image Inpainting with Gated Convolution

模型:DeepFillv2 (CVPR’2019) 论文:https://arxiv.org/abs/1806.03589 代码:https://github.com/JiahuiYu/generative_inpainting 文章目录 效果AbstractIntroductionRelated WorkAutomatic Image InpaintingGuided Image Inpainting and Sy…

KaiwuDB 资深解决方案专家周幸骏:打造核心时序引擎,释放数据新价值

以下为浪潮 KaiwuDB 资深解决方案专家周幸骏受邀于7月4日在京举行的可信数据库发展大会发表演讲的实录摘要,欢迎大家点赞、收藏、关注! 01 聚焦“时序” 据 IDC 等权威数据统计,预估 2025 年物联网设备产生的数据可达到 79.4ZB ;…

ubuntu与windows之间的文件共享

最近在做项目,需要用到ubuntu进行代码编译生成可执行文件,但是我个人阅读和编写代码喜欢用source insight这个软件IDE。安利一下这个软件,阅读代码和编辑代码真的很棒啊,谁用谁知道吧! 由于在ubuntu中安装source insig…

ShardingJDBC - 学习笔记

一、简介 官网:Apache ShardingSphere 下载地址:下载 :: ShardingSphere 快速入门:ShardingSphere-JDBC :: ShardingSphere 分库分表框架 ShardingSphere包括Sharding-JDBC、Sharding-Proxy、Sharding-Sidecar三个开源分布式数据库中间件解…