多线程---创建线程

1.概述

多线程是指从软件或者硬件上实现多个线程并发执行的技术。线程是程序中独立运行的程序片段,每个线程都有独立的执行流程,可以在同一时间内执行不同的任务。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。

多线程是并行化的一种形式,或者是拆分工作以便同时进行处理。线程化的程序将工作拆分到多个软件线程,而不是将大量工作交给单个内核。这些线程由不同的CPU内核并行处理,以节省时间。多线程可以提高程序的并发性和效率,实现异步处理,提高程序的响应速度和用户体验。

2.Thread类常用方法

  1. start():启动当前线程,使其进入就绪状态,等待CPU调度执行。调用该方法将自动调用线程的run()方法。
  2. run():线程执行的具体操作就在这个方法中定义。通常,我们会通过继承Thread类或实现Runnable接口来重写这个方法。
  3. currentThread():这是一个静态方法,用于返回当前正在执行的线程对象。
  4. getName():获取当前线程的名字。
  5. setName(String name):设置当前线程的名字。注意,这个设置通常在调用start()方法之前进行。
  6. yield():使当前线程放弃CPU的执行权,让其他线程有机会执行。这并不意味着当前线程不再执行,而是让出CPU时间片,等待下一次调度。
  7. join():在线程A中调用线程B的join()方法,会导致线程A等待,直到线程B执行完毕。这可以用来实现线程之间的同步。
  8. sleep(long millis):让当前线程休眠指定的毫秒数。在这段时间内,线程不会执行任何操作,也不会被调度。
  9. isAlive():判断当前线程是否还在执行。如果线程已经结束,该方法将返回false。
  10. interrupt():中断当前线程。如果线程正在执行阻塞操作(如sleep、wait、join等),中断会使其收到一个InterruptedException异常。

3.创建多线程的三种方式

创建子线程图解:

1. 继承Thread类:

实现步骤:

1.继承Thread类并重写run方法

public class MyThread extends Thread {@Overridepublic void run(){for(int i=0;i<10;i++){System.out.println("子线程"+i);}}
}

2.实例化Thread类

3.启动线程

public class CreateThread01 {public static void main(String[] args) {Thread Thread = new MyThread();//创建线程Thread.start();//启动线程线程for(int i=0;i<10;i++){System.out.println("主线程"+i);}}
}

2.实现Runnable接口:

实现Runnable接口的类作为任务类然后通过Thread类的实例来运行这个任务类。这种方式更推荐,因为它避免了单一继承的限制,更便于共享资源。

实现步骤:

1.实现Runnable接口,重写run方法

public class MyRunable implements Runnable {@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println("子线程"+i);}}
}

2.实例化Runable类

3.传入Runable类参数实例化Thread类

4.启动线程

public class CreateThread02 {public static void main(String[] args) {//写法一// Runnable runable = new MyRunable();//实例化Rubable的子类,创建任务对象//        new Thread(runable).start();//创建线程,将任务对象交给线程对象处理并启动线程//写法二,接口的匿名类写法new Thread(new Runnable() {@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println("子线程"+i);}}}).start();for(int i=0;i<10;i++){System.out.println("主线程"+i);}}
}

3.利用Callable接口:

Callable接口是类似于Runnable的接口,实现Callable接口的类和实现Runnable接口的类都是可以被其它线程执行的任务。通过实现Callable接口可以获取返回值,并可以抛出异常。

实现步骤:

1.实现Callable接口重写call方法并通过泛型指定返回值类型,这里的call类似run方法。

import java.util.concurrent.Callable;public class MyCallable implements Callable<String> {private int n;MyCallable(int n){this.n=n;}@Overridepublic String call() throws Exception {int sum=0;for(int k=0;k<n;k++){sum++;}return Thread.currentThread().getName()+"执行结果"+sum;}
}

2.实例化未来任务类FutureTask

3.实例化Thread类来运行未来任务类

4.启动线程

5.获取返回值

import jdk.nashorn.internal.codegen.CompilerConstants;import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;public class CreateThread03 {public static void main(String[] args) throws ExecutionException, InterruptedException {//创建Callable对象Callable<String> callable = new MyCallable(100);//创建未来任务对象FutureTask<String> f1=new FutureTask(callable);//封装任务对象并启动线程new Thread(f1,"子线程1").start();//获取线程执行结果System.out.println(f1.get());Callable<String> callable2 = new MyCallable(200);FutureTask<String> f2=new FutureTask(callable2);new Thread(f2,"子线程2").start();System.out.println(f2.get());}
}

执行结果

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

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

相关文章

反编译调试C#编写的exe软件和dll方法详解

1.首先需要下载软件dnSpy.exe&#xff0c;下载地址&#xff1a;https://github.com/dnSpy/dnSpy/releases/tag/v6.1.8 2.使用方法&#xff1a; 首先打开项目&#xff0c;我们这里可以选择dll&#xff0c;也可以选择exe 这边我们是打开了一个WPF写的客户端软件。 2.打开后我…

不同品牌和种类的电容与电感实测对比(D值、Q值、ESR、X)

最近买了个LCR电桥&#xff0c;就想测一下手头上的各种电容电感的参数&#xff0c;对比一下。 测试设备是中创ET4410&#xff0c;测量的参数有&#xff1a;电容值、电感值、D(损耗角正切值)、Q(品质因数)、ESR(等效串联电阻)、X(电抗&#xff0c;通常表示为感抗XL或容抗XC)。 …

使用 LangChain+大模型,基于文本数据构建知识图谱

大家好&#xff01;在本篇博客中&#xff0c;我将带领大家学习知识图谱以及如何利用大模型和自己的文本数据构建一个。 喜欢本文记得收藏、关注、点赞。 什么是知识图谱&#xff1f; 知识图谱&#xff0c;也被称为语义图&#xff0c;是一种智能结构&#xff0c;以高效的方式…

【打工日常】使用docker部署Dashdot工具箱

一、Dashdot介绍 dashdot是一个简洁清晰的服务器数据仪表板&#xff0c;基于React实现 &#xff0c;主要是显示操作系统、进程、存储、内存、网络这五个的数据。 二、本次实践介绍 1. 本次实践简介 本次实践部署环境为个人测试环境 2. 本地环境规划 本次实践环境规划&#xf…

PyCharm 自动缩进代码 (Auto-Indent Lines)

PyCharm 自动缩进代码 [Auto-Indent Lines] 1. Ctrl A2. Code -> Auto-Indent LinesReferences 1. Ctrl A 全选代码。 2. Code -> Auto-Indent Lines 自动缩进快捷键 Ctrl Alt I。 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

使用Apache ECharts同时绘制多个统计图表

目录 1、介绍 2、相关知识 3、代码 4、效果 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&#xff0c;初步涉猎Python人工智能开发和前端开发。 …

十四、java 异常

文章目录 异常5.1 初识异常5.1.1 NullPointerException5.1.2 NumberFormatException 5.2 异常类5.2.1 Throwable5.2.2 异常类体系5.2.3 自定义异常 5.3 异常处理5.3.1 try/catch匹配5.3.2 重新抛出异常5.3.3 finally5.3.4 try-with-resources5.3.5 throws5.3.6 对比受检和未受检…

第五次作业:LMDeploy 的量化和部署

参考文档&#xff1a;https://github.com/InternLM/tutorial/blob/main/lmdeploy/lmdeploy.md 基础作业&#xff1a; 使用 LMDeploy 以本地对话、网页Gradio、API服务中的一种方式部署 InternLM-Chat-7B 模型&#xff0c;生成 300 字的小故事&#xff08;需截图&#xff09; …

Mac golang下载安装以及环境变量配置

下载地址&#xff1a; All releases - The Go Programming Language 1、选择对应的系统版本 2、双击打开安装包&#xff0c;如图进行安装 3、验证安装 go version

交流非线性RCD负载的工作原理

非线性电阻电容电感&#xff08;RCD&#xff09;负载是一种常见的电子元件&#xff0c;广泛应用于各种电子设备中。它的主要作用是限制电流的快速变化&#xff0c;保护电路中的其他元件不受过大的电压或电流冲击。 非线性RCD负载的工作原理主要基于其电阻、电容和电感的特性。当…

C#学习(十三)——多线程与异步

一、什么是线程 程序执行的最小单元 一次页面的渲染、一次点击事件的触发、一次数据库的访问、一次登录操作都可以看作是一个一个的进程 在一个进程中同时启用多个线程并行操作&#xff0c;就叫做多线程 由CPU来自动处理 线程有运行、阻塞、就绪三态 代码示例&#xff1a; cl…

使用Autodl云服务器或其他远程机实现在本地部署知识图谱数据库Neo4j

本篇博客的目的在于提高读者的使用效率 温馨提醒&#xff1a;以下操作均可在无卡开机状态下就可完成 一.安装JDK 和 Neo4j 1.1 ssh至云服务器 打开你的pycharm或者其他IDE工具或者本地终端&#xff0c;ssh连接到autodl的服务器。(这一步很简单如下图) 1.2 安装JDK 由于我…

12 个顶级音频转换器软件(免费)

当涉及不受支持的音乐文件时&#xff0c;音频文件转换器软件总是会派上用场。当您希望缩小大量大型音乐文件的大小以节省设备存储空间时&#xff0c;它也很有帮助。您在寻找传输音频的软件吗&#xff1f;好吧&#xff0c;请仔细选择音频转换器&#xff0c;因为最好的音乐转换器…

C++之内存对齐

目录 内存对齐 一、内存对齐解释 二、为什么要内存对齐&#xff1f; 三、内存对齐的三大规则 3.1、数据成员对齐规则 3.2、结构(或联合)的整体对齐规则 3.3、结构体作为成员 3.4、代码例子 内存对齐 一、内存对齐解释 对齐规则是按照成员的声明顺序&#xff0c;依次安排…

【大模型 数据增强】无监督关系抽取任务的新方法

【大模型 数据增强】无监督关系抽取任务的新方法 提出背景解法&#xff1a;多样性正样本对增强&#xff08;AugURE&#xff09;特征1&#xff1a;句内正样本对增强特征2&#xff1a;跨句正样本对提取特征3&#xff1a;使用边界敏感损失函数 医学场景&#xff1a;自动抽取药物-疾…

软件实例分享,家具生产出库管理系统软件教程

软件实例分享&#xff0c;家具生产出库管理系统软件教程 一、前言 以下软件程序教程以 佳易王家具行业生产出库管理系统软件V16.1为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 销售管理——产品状态查询变更&#xff0c;可以根据生产进度变更…

作为项目经理,PMP值得考嘛?最近PMP变数特别大,你还看好PMP嘛?

做项目管理的话&#xff0c;自然是值得考的&#xff0c;现在PMP几乎是项目管理的必考证书了&#xff0c;找工作需要PMP优先&#xff0c;做项目也要求PMP&#xff0c;做项目相关工作的建议去看一个 一、先给大家分析一下PMP 证书的使用场景 1、项目管理岗位招聘的门槛 PMP 是项…

房产证翻译,证件类翻译公司推荐

随着全球化的发展&#xff0c;证件类翻译在我们的生活中越来越常见。其中&#xff0c;房产证翻译是尤为重要的一种。它不仅关乎到个人的财产权益&#xff0c;更在留学、移民、财产公证以及办理贷款等关键场合起到举足轻重的作用。那么&#xff0c;如何做好房产证证件类翻译&…

【stm32】DAC输出三角波锯齿波

【stm32】DAC输出三角波锯齿波及任意波形 导入DAC.ioc&#xff08;见上节DAC学习笔记&#xff09; DAC输出三角波 CubeMX图形化配置 DAC配置 实现0.1ms定时周期 时钟树配置 程序编写 /* USER CODE BEGIN Includes */ #include "lcd.h" /* USER CODE END Inc…

《Go 简易速速上手小册》第3章:数据结构(2024 最新版)

文章目录 3.1 数组与切片&#xff1a;Go 语言的动态队伍3.1.1 基础知识讲解3.1.2 重点案例&#xff1a;动态成绩单功能描述实现代码扩展功能 3.1.3 拓展案例 1&#xff1a;数据分析功能描述实现代码扩展功能 3.1.4 拓展案例 2&#xff1a;日志过滤器功能描述实现代码扩展功能 3…