Java中Thread 类的五种基本用法(简介)

news2024/12/24 8:40:23

目录

一.线程创建

Lambda创建一个线程

基础格式

举例

运行结果

 二.线程中断

第一种:设置变量方法

举例

运行结果

第二种:interrupted()方法

举例

运行结果

 三.线程等待

举例

运行结果

四.线程休眠

举例

五.获取线程实例

举例

运行结果


一.线程创建

线程的创建一般来说有五种

1.lambda

2.继承Thread,重写run

3.实现Runnable,重写run

4.使用匿名内部类,继承Thread,重写run

5.使用匿名内部类,实现Runnable,重写run

这我的这篇博客详细介绍了这五种方法的代码和实现 

Java创建多线程的五种写法_幻荼的博客-CSDN博客

在这里我就只写lambda的那种,因为这个最方便最推荐

Lambda创建一个线程

基础格式

public class Main {
    public static void main(String[] args) {
        Thread thread = new Thread(()->{
//此处写线程实现的代码
            }
        });
        thread.start();
//此处写主函数的代码
    }
}

举例

public class Main {
    public static void main(String[] args)  {
        Thread thread = new Thread(()->{
            int i = 0;
            while(i<5){
                System.out.println("阿米娅"+i);
                i++;
            }
        });
        thread.start();
        int j = 10;
        while(j>5){
            System.out.println("爱莉希雅"+j);
            j--;
        }
    }
}

运行结果

(线程和主程序运行结果可能会调换顺序)

 二.线程中断

一般来说有两种方法

1.自己设置变量进行判断

2.使用interrupted()方法进行判断

第一种:设置变量方法

就是自己设置一个变量,如果满足则线程继续执行,如果不满足则结束

举例

public class demo8 {
//此处设置了一个名字叫做isQuit的boolean的变量作为线程是否继续的条件
    public static boolean isQuit = true;

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(()->{
            int i = 0;
//如果这个变量一直为true,那么这个线程会一直执行下去,每隔一秒打印一次
            while(isQuit){
                System.out.println(i);
                i++;
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        t1.start();
//在线程执行5秒后,将变量变为false,那么线程就会停止执行
        Thread.sleep(5000);
        isQuit=false;
    }
}

运行结果

上面这种方式比较温柔不会弹出错误

而下面这种使用函数的方式会提醒更加醒目

第二种:interrupted()方法

相当于使用函数来代替我们的判断方法

举例

public class demo9 {
    public static void main(String[] args) throws InterruptedException {
        int i = 0;
        Thread t1 = new Thread(()->{
            int j = i;
//此处的Thread.currentThread().isInterrupted()就相当于判断是否被打断
//如果没有被interrupt打断,那么结果一直是false,直到调用interrupt方法后变为true
           while(!Thread.currentThread().isInterrupted()){
               System.out.println(j);
               j++;
               try {
                   Thread.sleep(1000);
               } catch (InterruptedException e) {
                   throw new RuntimeException(e);
               }
           }
        });
        t1.start();
        Thread.sleep(5000);
//调用interrupt方法,打断
        t1.interrupt();
    }
}

关于Thread.currentThread().isInterrupted()这个函数大家可以这么理解

 

运行结果

这个时候就会报错了

 三.线程等待

简单来说就是让某个线程先运行

等该线程运行完毕后再运行下面的代码

举例

public class demo10 {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(()-> {
            System.out.println("我是线程1,我有join我先执行");
        });
        Thread t2 = new Thread(()-> {
            System.out.println("我是线程2,我也有join但是我后面join,我后你一步执行");
        });
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        System.out.println("我是函数,我没有join只有等你们都运行完毕我在运行");
    }
}

运行结果

 

 只要调用了join,那么后面的代码就一定后执行

四.线程休眠

就是让该线程休眠多少ms

(1s=1000ms)

举例

public class demo11 {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(()->{
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println("我先睡五秒再打印");
        });
        t1.start();
        for (int i = 0; i < 5; i++) {
            System.out.println(i);
            Thread.sleep(1000);
        }
    }
}

运行结果

 由于程序是并发运行的,但是运行线程的时候遇到了sleep,短暂休眠了5秒

这个时候就先打印了函数,五秒之后再打印线程里面的内容,这就是休眠sleep的用法!

五.获取线程实例

不就是我们在打断方法的时候用过的Thread.currentThread()吗

举例

public class demo12 {
    public static void main(String[] args) {
        Thread t1 = Thread.currentThread();
        System.out.println(t1.getName());
    }
}

运行结果

 

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

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

相关文章

如何用梯度下降法求解数学建模的拟合问题——以logistics增长问题为例

引言 众所周知的是&#xff0c;在大学课程中一般只会教授一种拟合方法(也即参数估计方法)——最小二乘法。这是一种直接求解的方法&#xff0c;非常的有效&#xff0c;不仅是损失最小解&#xff0c;而且是最大似然解。只不过&#xff0c;有一个缺点&#xff0c;它只能解决线性…

Jenkins配置仅合并代码后触发流水线

使用GitLabJenkins集成&#xff0c; 使用Jenkins的Generic WebHook插件&#xff1b;此插件可以作为各个工具间集成使用的通用方式&#xff0c;但是遇到些场景需要写些代码。关于 “合并代码后触发Pipeline”的配置方式&#xff0c; 其实思路简单&#xff0c;实现和让我描述起来…

电脑怎样连接打印机?分享4个简单操作!

为了更方便学习&#xff0c;我买了一个打印机来打印需要用的资料&#xff0c;但是操作了半天还是没连接上&#xff0c;想请问一下有经验的朋友是怎么将打印机与电脑进行连接的呢&#xff1f; 在现代人的工作和生活中&#xff0c;打印机是一个重要的设备。我们可以利用打印机进行…

一文搞懂String、StringBuffer、StringBuilder三者的对比以及扩容机制

String:不可变的字符序列&#xff1b;底层使用char[]存储StringBuffer:可变的字符序列&#xff1b;线程安全的&#xff0c;效率低&#xff1b;底层使用char[]存储StringBuilder:可变的字符序列&#xff1b;jdk5.0新增的&#xff0c;线程不安全的&#xff0c;效率高&#xff1b;…

行为型设计模式09-中介者模式

&#x1f9d1;‍&#x1f4bb;作者&#xff1a;猫十二懿 ❤️‍&#x1f525;账号&#xff1a;CSDN 、掘金 、个人博客 、Github &#x1f389;公众号&#xff1a;猫十二懿 中介者模式 1、中介者模式介绍 中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为设计模…

【MySQL数据库】MySQL 高级SQL 语句一

[TOC](MySQL 高级SQL 语句 一、MySQL 高级SQL 语句1.1select -显示表格中一个或数个字段的所有数据记录1.2distinct不显示重复的数据记录1.3where有条件查询1.4and、or且 或1.5in 显示已知的值的数据记录1.6between 显示两个值范围内的数据记录1.7通配符&#xff0c;通常通配符…

都2023年了,JavaScript ES6后的新(lao)特性,你用起来了吗?

前言 JavaScript ES6 指的是 ECMAScript 6&#xff0c;它是 JavaScript 语言第六版的规范。ES6 包含了很多新特性和语法糖&#xff0c;涵盖了从 ES6 开始至今所增加的所有特性。 因此&#xff0c;ES6 新特性是指从 ES6 开始新增到当前时刻所有的新特性&#xff0c;包括但不限…

FPGA XDMA 中断模式实现 PCIE X8 HDMI视频采集 提供工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案视频采集和缓存XDMA简介XDMA中断模式QT上位机及其源码 5、vivado工程详解6、上板调试验证7、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&#xff09;采用了目前业内流行的点对点串…

四肽-21——改善皮肤紧实感、光滑感和弹性

简介 四肽-21是一种来源于皮肤自身的四胜肽&#xff0c;它结构独特、能高效的促进细胞外基质合成&#xff0c;从而减少各种皱纹和改善皮肤衰老现象。与市场上非常受欢迎的基肽(Matrixyl&#xff09;相比&#xff0c;四肽-21效果更为突出。 Tetrapeptide-21 is a type of tetra…

LeetCode - #85 最大矩形(Top 100)

文章目录 前言1. 描述2. 示例3. 答案题解 1题解 2 关于我们 前言 本题为 LeetCode 前 100 高频题 本题由于没有合适答案为以往遗留问题&#xff0c;最近有时间将以往遗留问题一一完善。 我们社区陆续会将顾毅&#xff08;Netflix 增长黑客&#xff0c;《iOS 面试之道》作者&am…

解密后无法加载到指定模版,且模版名为空

问题如图&#xff1a; 原因&#xff1a;因为改变了项目的集成管理&#xff0c;导致变量丢失

Redis原理 - 五种数据类型的底层结构关系

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis原理 - 五种数据类型的底层结构关系 | CoderMast编程桅杆https://www.codermast.com/database/redis/base-datatype-implement.html #字符串对象String String 是 Redis 中最常见的数据存储类型。 其基本编码方式是 …

安卓蓝牙SDP协议数据包

1. SDP概念 我们想一想&#xff0c;两个陌生的设备&#xff08;之前未有过交互&#xff09;如何去发现对方支持什么服务呢&#xff1f;比如Host端的Controller怎么知道远程蓝牙设备是蓝牙耳机还是HID遥控器呢&#xff1f;我们需要一种协议&#xff0c;这种协议在蓝牙设备配对成…

Git-Desktop【使用说明】

仓库操作 简单的创建仓库、删除仓库 删除点击 Remove 即可 文件操作 1、提交文件到本地仓库 2、修改文件 Git没有修改文件这一说&#xff0c;它只会再次提交一个新的版本到仓库中&#xff0c;提交修改后的文件其实是在仓库创建了一个新的文件&#xff0c;只不过是一个不同的…

Optano.Modeling 简单教程

前言 在工作中遇到两个需求&#xff0c;将两个数学公式用 .NET 的数学库找到数学公式中某个未知数的最优解&#xff0c;我尝试了几个数学库都没有办法完美解决我的需求&#xff0c;直到找到 Optano.Modeling Optano.Modeling 官网&#xff1a;Optano.Modeling 官网 Optano.Mo…

AI操作视频的工具最新最强集合

AI的进化日新月异&#xff0c;很多之前只是在想象中的操作&#xff0c;已经有很多可以使用AI来完成了。最新的Stable Diffusion,ControlNet,EBsynth有哪些神奇的应用&#xff0c;如何一键替换视频中人物和场景&#xff0c;如何根据文字描述即可生成梦幻视频&#xff1f;我们整理…

DFS/回溯/动态规划算法的融会贯通

学算法认准 labuladong 后台回复课程查看精品课 点击卡片可搜索文章&#x1f447; 在线学习网站&#xff1a; https://labuladong.gitee.io/algo/ 经常有读者后台问我&#xff0c;DFS算法/回溯算法/动态规划算法之间的区别和联系是什么&#xff1f; 对于这个问题&#xff0c;我…

私有化部署的无忧·企业文档2.1.7新版本核心功能介绍

无忧企业文档是一款针对企业用户提供在线文档、协同编辑、知识管理的基础化办公工具&#xff0c;产品采用B/S构架。功能覆盖场景包括&#xff1a;在线文档的私有化部署、团队协同、知识管理、在线文档识别的扩展、文档权限化管理等等场景。本次2.1.7版本更新了以下几个核心功能…

【机器学习】十大算法之一 “线性回归”

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

什么是事件委托

文章目录 导文文章重点具体而言&#xff0c;事件委托包含两个主要角色&#xff1a;通过使用事件委托&#xff0c;可以实现以下优势&#xff1a; 代码示例 导文 事件委托是一种在软件开发中常用的设计模式&#xff0c;用于处理事件和回调函数。它允许一个对象&#xff08;委托对…