Thread 类的基本用法

目录

一.线程创建

1.方法(1)继承Thread来创建一个线程类

2.方法(2)实现 Runnable 接⼝

3.方法(3)匿名内部类创建 Thread ⼦类对象

二.线程的中断

三.线程等待

4.线程休眠


一.线程创建

Java 中的线程(Thread)是一种轻量级的子进程,用于执行程序中的一段代码。线程的使用可以实现程序的并发执行,提高程序的运行效率。在 Java 中,线程的基本用法涉及线程的创建、中断、等待、休眠以及获取线程实例等操作。

1.方法(1)继承Thread来创建一个线程类

class MyThread extends Thread{public void run(){System.out.println("这里是线程运行的代码");}
}public class Test {public static void main(String[] args) {MyThread myThread = new MyThread();       //创建MyThread类的实例myThread.start();          //调用start方法启动线程}
}

2.方法(2)实现 Runnable 接⼝

class MyThread extends Thread{public void run(){System.out.println("这里是继承Thread类的代码");}
}class MyRunable implements Runnable{          //继承Thread来创建一个线程类public void run(){System.out.println("这是实现Runable接口的代码");}
}public class Test {public static void main(String[] args) {MyThread myThread = new MyThread();Thread t = new Thread(new MyRunable());        //创建 Thread 类实例, 调⽤                 //Thread 的构造⽅法时将 //Runnable 对象作为 target 参数.myThread.start();t.start();                                //调⽤ start ⽅法启动线程}
}

3.方法(3)匿名内部类创建 Thread ⼦类对象

Thread t1 = new Thread() {@Overridepublic void run() {System.out.println("使⽤匿名类创建 Thread ⼦类对象");}
};

lambda 表达式创建 Runnable ⼦类对象

 Thread t4 = new Thread(()->{System.out.println("使⽤匿名类创建 Thread ⼦类对象");});

二.线程的中断

通过调用interrupt()方法来中断

public class Test {public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(()->{int count = 0;while (!Thread.currentThread().isInterrupted()){System.out.println(count);count++;}});t1.start();Thread.sleep(1000);t1.interrupt();}
}

在上述代码中,通过 Thread.currentThread().isInterrupted() 来检查线程的中断状态。如果线程未被中断,则继续执行耗时操作,否则退出循环。

三.线程等待

有时,我们需要等待⼀个线程完成它的⼯作后,才能进⾏⾃⼰的下⼀步⼯作,我们使用join()方法来进行

public class Test {public static void main(String[] args) throws InterruptedException {//Object locker = new Object();for (int i = 0; i < 10; i++) {Thread t1 = new Thread(()-> {System.out.print("A");});Thread t2 = new Thread(()->{System.out.print("B");});Thread t3 = new Thread(()->{System.out.println("C");});t1.start();t1.join();t2.start();t2.join();t3.start();t3.join();}}}

上述代码中,在t1执行完后再执行t2,在t2执行完后再执行t3,按照顺序打印出ABC,大家可以试试把join注释掉,看看运行的结果

4.线程休眠

线程休眠是一种使线程暂停执行一段时间的机制,可以通过调用 sleep() 方法来实现。

public class Test {public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(()->{int count = 0;while (true){System.out.println(count);count++;try {Thread.sleep(1000);      //休眠1秒} catch (InterruptedException e) {throw new RuntimeException(e);}}});t1.start();}
}

在上述代码中,每次打印一次count都会暂停一秒,让后在继续打印

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

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

相关文章

001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂

001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂 文章目录 001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂创作背景通信模型ISO/OSI七层模型 和 TCP/IP四层模型网络通信数据包格式&#xff08;Ethernet II&…

在MOS管栅极前加100Ω电阻,有啥妙用

我们经常会听到在MOSFET栅极前增加一个电阻。那么&#xff0c;为什么要增加这个电阻&#xff0c;进一步地来讲&#xff0c;为什么要增加一个100Ω电阻&#xff1f; 在MOSFET的栅极前增加一个电阻&#xff1f; MOS管是电压型控制器件&#xff0c;一般情况下MOS管的导通&#x…

基于ollama搭建本地chatGPT

ollama帮助我们可以快速在本地运行一个大模型&#xff0c;再整合一个可视化页面就能构建一个chatGPT&#xff0c;可视化页面我选择了chat-ollama&#xff08;因为它还能支持知识库&#xff0c;可玩性更高&#xff09;&#xff0c;如果只是为了聊天更推荐chatbox 部署步骤 下载…

unity记一下如何播放动画

我使用的版本是2022.3.14fc 展开你的模型树&#xff0c;是会出现这个三角形的东西的 然后在资源面板创建一个animation controller 进去之后&#xff0c;把三角形拖进去&#xff0c;就会出现一个动画&#xff0c;然后点击他 在左侧给他创建这么个状态名字&#xff0c;类型…

xss常用标签和触发事件

无过滤情况 <script> <scirpt>alert("xss");</script> <img> 图片加载错误时触发 <img src"x" οnerrοralert(1)> <img src"1" οnerrοreval("alert(xss)")> 鼠标指针移动到元素时触发 <im…

(一)基于IDEA的JAVA基础15

还是先来说一下: Arrays工具类 Arrays是java.util包提供的工具类 提供了操作数组的方法&#xff0c;如排序,查询等。 如排序(升序)使用sort方法 语法: Arrays.sort(数组名)&#xff1b; 还是直接写来看看: public class Test01 { public static void main(String[] args)…

Docker搭建doublecommander

Double Commander Docker 镜像教程 Double Commander 是一个跨平台的开源文件管理器&#xff0c;具有两个面板侧边并排的布局&#xff0c;灵感来源于 Total Commander。使用 Double Commander 可以很方便地管理文件和目录。 以下是使用 Docker CLI 和 Docker Compose 搭建 Do…

Swagger API 文档 | SpringBoot 3.x 集成 SpringDoc

文章目录 常规方式第 1 步:添加依赖第 2 步:配置 API 信息及全局参数配置 OpenAPI 文档配置单个 OpenAPI 文档 - 方式 1配置单个 OpenAPI 文档 - 方式 2配置多个 OpenAPI 文档其它 SpringDoc 及 Swagger-UI 配置第 3 步:添加 Swagger3 注解Swagger2 和 Swagger3 注解对应关系…

云服务器web环境之mariadb

1.安装mariadb服务 yum install mariadb-server 启动mariadb服务 systemctl start mariadb.service 输入mysql就能使用数据库了。 2.服务相关操作 systemctl stop mariadb.service systemctl restart mariadb.service 2.配置开机自启动 systemctl enable mariadb.serv…

vue快速入门(二十四)输入停顿再进行响应

注释很详细&#xff0c;直接上代码 上一篇 新增内容 使用侦听器监视数据变化情况使用clearTimeout与定时器实现停顿一段时间再操作内容 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"view…

64B/66B GT Transceiver 配置

一、前言 前一篇文章已经讲述了64B/66B的编码原理&#xff0c;此篇文章来配置一下7系列GT的64B/66B编码。并讲述所对应的例子工程的架构&#xff0c;以及部分代码的含义。 二、IP核配置 1、打开7 Series FPGAs Transceiver Wizards&#xff0c;选择将共享逻辑放置在example …

使用DockerCompose安装Redis

本文使用docker-compose的方式安装Redis&#xff0c;如何未安装docker-compose&#xff0c;可以参考这篇文章进行安装【在Ubuntu上安装Docker Compose】 一、创建一个DockerCompose配置文件 第一步&#xff1a;创建相关目录文件 为了更好的组织管理Docker容器的配置文件和映射…

5G网络开通与调测ipv4

要求如下&#xff1a; 1. 勘站规划 1. 【重】首先观察NR频点&#xff0c;完成设备选型 2645--选择N41 3455--选择N78 4725--选择N79 设备选型如下&#xff1a;观察AAU的通道数&#xff0c;最大发射功率&#xff1b;选择N41的选型频段也要选41 2. …

【MATLAB源码-第189期】基于matlab的人工蜂群优化算法(ABC)无人机三维路径规划,输出做短路径图和适应度曲线

操作环境&#xff1a; MATLAB 2022a 1、算法描述 Artificial Bee Colony&#xff08;ABC&#xff09;算法是一种模仿蜜蜂觅食行为的优化算法&#xff0c;它通过模拟蜜蜂群体的社会结构和行为来解决数学优化问题。本文将详细介绍ABC算法的基本原理、算法流程、以及在实际应用…

缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等名词解析

一、缓存雪崩 我们可以简单的理解为&#xff1a;由于原有缓存失效&#xff0c;新缓存未到期间 (例如&#xff1a;我们设置缓存时采用了相同的过期时间&#xff0c;在同一时刻出现大面积的缓存过期)&#xff0c;所有原本应该访问缓存的请求都去查询数据库了&#xff0c;而对数据…

代理模式(结构型模式)

目录 1、概述 2、结构 2.1、角色分类 2.2、类图 3、静态代理 3.1、案例类图 3.2、案例代码 4、JDK 动态代理 4.1、案例代码 4.2、底层原理 4.3、执行流程说明 5、CGLib 动态代理 5.1、案例代码 6、三种代理的对比 6.1、JDK代理和CGLib代理 6.2、动态代理和静态…

matlab学习(三)(4.9-4.15)

一、空域里LSB算法的原理 1.原理&#xff1a; LSB算法通过替换图像像素的最低位来嵌入信息。这些被替换的LSB序列可以是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。 2.实现步骤&#xff1a; &#xff08;1&#xff09;将图像文件中的所有像素点以RGB形…

【C语言】每日一题,快速提升(1)!

调整数组使奇数全部都位于偶数前面 题目&#xff1a; 输入一个整数数组&#xff0c;实现一个函数 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分 所有偶数位于数组的后半部分 解题思路&#xff1a; 给定两个下标left和right&#xff0c;left放在数组的起始…

Web端Excel的导入导出Demo

&#x1f4da;目录 &#x1f4da;简介:✨代码的构建&#xff1a;&#x1f4ad;Web端接口Excel操作&#x1f680;下载接口&#x1f680;导入读取数据接口 &#x1f3e1;本地Excel文件操作⚡导出数据&#x1f308;导入读取数据 &#x1f4da;简介: 使用阿里巴巴开源组件Easy Exce…

01 MySQL 之 概念 + 执行顺序 + 表、字段规范

1. 定义 1.1 SQL的分类 DQL - 数据查询语言&#xff08;Data Query Language, DQL&#xff09;负责进行数据查询而不会对数据本身进行修改的语句。 SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。DDL - 数据定义语言 (Data Definition Language, DDL) 负责数据结构定义与…