Java | 多线程

news2025/1/15 23:38:20

不爱生姜不吃醋⭐️
如果本文有什么错误的话欢迎在评论区中指正
与其明天开始,不如现在行动!

文章目录

  • 🌴前言
  • 🌴一、什么是多线程?
    • 1.进程
    • 2.线程
    • 3.多线程作用
  • 🌴二、多线程中的两个概念
    • 1. 并发
    • 2. 并行
    • 3.举例
  • 🌴三.多线程的实现方式
    • 1.继承Thread类
    • 2.实现Runnable接口
    • 3. 利用Callable接口和Future接口
    • 4. 三种实现方式的对比
    • 在这里插入图片描述
  • 🌴总结


🌴前言

本文内容是关于多线程的知识,包括使用Java实现多线程的三种方式。


🌴一、什么是多线程?

1.进程

进程是程序的基本执行实体。

在这里插入图片描述

2.线程

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程的实际运作单位。
例:电脑管家是一个进程,其中垃圾清理和病毒查杀就是线程。

若是应用软件中有多个互相独立,可以同时运行的功能,那么就叫做多线程。

3.多线程作用

可以让程序同时做多件事情,提高效率。


🌴二、多线程中的两个概念

1. 并发

在同一时刻,有多个指令在单个CPU交替执行。

2. 并行

在同一时刻,有多个指令在多个CPU同时执行。

3.举例

以2核4线程为例,如果同时打开了四个线程,那么此时状态为并发,如果打开了超过四个线程,那么此时会随机切换线程,并发和并行状态共存。


🌴三.多线程的实现方式

1.继承Thread类

  1. 自己定义一个类继承Thread
  2. 重写run()方法
  3. 创建子类的对象,并启动线程

定义一个类

public class MyThread extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("我是" + getName());
        }
    }
}

启动线程

public class ThreadDemo {
    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();

        t1.setName("线程一");
        t2.setName("线程二");

        t1.start();
        t2.start();
    }
}

2.实现Runnable接口

  1. 自己定义一个类实现Runnable接口
  2. 重写run()方法
  3. 创建自己的类的对象
  4. 创建一个 Thread类的对象,并开启线程

定义一个类

public class MyRunnable implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("我是" + Thread.currentThread().getName());
        }
    }
}

启动线程

public class RunnableDemo {
    public static void main(String[] args) {
        MyRunnable mr = new MyRunnable();

        Thread t1 = new Thread(mr);
        Thread t2 = new Thread(mr);

        t1.setName("线程一");
        t2.setName("线程二");

        t1.start();
        t2.start();
    }
}

3. 利用Callable接口和Future接口

  1. 自己定义一个类MyCallable实现Runnable接口
  2. 重写call()方法(有返回值,表示多线程运行的结果)
  3. 创建MyCallable的对象(表示多线程要执行的任务)
  4. 创建FutureTask的对象(作用管理多线程运行的结果)
  5. 创建一个 Thread类的对象,并启动线程

定义一个类

public class MyCallable implements Callable<Integer> {
    int sum = 0;
    @Override
    public Integer call() throws Exception {
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        return sum;
    }
}

启动线程

public class ThreadDemo2 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyCallable mc = new MyCallable();
        FutureTask<Integer> ft = new FutureTask<>(mc);
        Thread t = new Thread(ft);
        t.start();
        System.out.println(ft.get());
    }
}

4. 三种实现方式的对比

在这里插入图片描述

🌴总结

文章中代码的编写使用的都是Java线程的知识,多加练习熟能生巧。
本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!


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

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

相关文章

python-面向运行时性能优化-threading

python-面向运行时性能优化-threading 一:线程基础1> 线程状态2> 线程同步1. 锁的状态3> 线程通信-条件变量4> 线程阻塞-之间转换1. 阻塞分类二:threading类1> threading介绍2> Thread类1. Thread的生命周期2. 实例化Thread类3. 继承Thread类4. Thread构造…

9.11作业

实现一个对数组求和的函数&#xff0c;数组通过实参传递给函数 sum0 arr(11 22 33 44 55) Sum() {for i in ${arr[*]}do$((sumi))donereturn $sum } Sum ${arr[*]} var$? echo $var写一个函数&#xff0c;输出当前用户的uid和gid&#xff0c;并使用变量接收结果 Sum() {aid -…

C高级作业 【使用shell脚本】 实现一个对数组求和的函数,数组通过实参传递给函数+写一个函数输出当前用户的uid和gid,并使用变量接收结果

作业 1、实现一个对数组求和的函数&#xff0c;数组通过实参传递给函数 #!/bin/bash # 定义求和函数 function sum() {local arr("$") # 将传入的参数保存到一个数组中local sum0 # 初始化求和为0# 遍历数组元素进行求和for num in "${arr[]}";dosum$…

零代码编程:用ChatGPT批量合并ts文件

文件夹中有很多个ts后缀的视频文件&#xff0c;要合并成一个视频文件&#xff0c;在ChatGPT中可以这样输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个批量合并ts文件的任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;C:\Users\dell\…

亚马逊测评下单怎么操作?有没有自动下单软件?

想要进行亚马逊的测评下单&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;在亚马逊官方网站上搜索你感兴趣的产品&#xff0c;选择你喜欢的产品并查看其详细信息、价格以及其他用户的评价&#xff0c;确认你的购买意向后&#xff0c;点击“加入购物车”将…

C高级 shell指令分支和循环

实现一个对数组求和的函数&#xff0c;数组通过实参传递给函数 #!/bin/bash s0 function sum() {local brr($*)for i in ${brr[*]}do((si))doneecho $s } arr(1 2 3 4 5 6 7 8 9 ) sum ${arr[*]}写一个函数&#xff0c;输出当前用户的uid和gid&#xff0c;并使用变量接收结果 #…

Grafana配置邮件告警

1、创建一个监控图 2、grafana邮件配置 vim /etc/grafana/grafana.ini [smtp] enabled true host smtp.163.com:465 user qinziteng05163.com password xxxxx # 授权码 from_address qinziteng05163.com from_name Grafanasystemctl restart grafana-serv…

DAY03_瑞吉外卖——公共字段自动填充新增分类分类信息分页查询删除分类修改分类

目录 1. 公共字段自动填充1.1 问题分析1.2 基本功能实现1.2.1 思路分析1.2.2 代码实现1.2.3 功能测试 1.3 功能完善1.3.1 思路分析1.3.2 ThreadLocal1.3.3 操作步骤1.3.4 代码实现1.3.5 功能测试 2. 新增分类2.1 需求分析2.2 数据模型2.3 前端页面分析2.4 代码实现2.5 功能测试…

【算法】二分查找算法——leetcode二分查找、搜索插入位置

文章目录 二分查找704. 二分查找35. 搜索插入位置 二分查找 二分查找算法是一种在有序数组中查找特定元素的搜索算法。算法的工作原理是&#xff0c;通过比较数组中间元素和目标值&#xff0c;如果目标值等于中间元素&#xff0c;那么查找结束。如果目标值小于或大于中间元素&a…

单元测试界的高富帅,Pytest框架 (三) 用例标记和测试执行篇

pytest用例标记和测试执行篇 上一篇文章入门篇咱们介绍了pytest的前后置方法和fixture机制&#xff0c;这个章节主要给大家介绍pytest中的标记机制和用例执行的方法。pytest可以通过标记将数据传入于测试函数中&#xff0c;也可以通过标记中对执行的用例做筛选&#xff0c;接下…

NTC 温度采样 二分查表及公式法

NTC 温度采样&#xff1a; 本文记录对NTC 温度采样&#xff0c;分别采用二分查表法及公式法进行描述 资源下载链接&#xff1a;Excel 生成数组表 https://download.csdn.net/download/qq_41359157/88326839?spm1001.2014.3001.5503 NTC参数&#xff1a; NTC采样电路&#xf…

2023 年 Vue 最流行的动画库

数字世界以短暂的注意力和激烈的竞争为主导&#xff0c;因此必须立即将受众的注意力吸引到您的网站上。使用 Vue 动画库&#xff0c;您可以毫不费力地实现这一目标。据报道&#xff0c;VueJs 是 JavaScript 类别中第 7 大最受欢迎的&#xff0c;来自世界各地的开发人员使用它来…

arthas基本应用

下载 arthas curl https://arthas.aliyun.com/arthas-boot.jar启动 arthas&#xff08;启动之前确保有一个 java进程服务&#xff09; java -jar arthas-boot.jar输入3&#xff0c;再输入回车/enter。Arthas 会 attach 到目标进程上&#xff0c;并输出志&#xff1a; 输入das…

如何抢占3020亿美元市场先机?送你一份指南

印度电商市场规模正在快速增长。预计到2023年&#xff0c;印度电商市场规模将达到2000亿美元。其中&#xff0c;B2C电商市场规模将占据主导地位&#xff0c;预计将增长至1000亿美元。 此外&#xff0c;印度政府也在积极推动数字化发展&#xff0c;为电商企业提供更多机会。政府…

Python语言:算术运算符知识点讲解

前言&#xff1a;学了几天python&#xff0c;可把我折磨坏了。为什么呢&#xff0c;就是python语言都特别爱空格&#xff0c;我有时候就忘了&#xff0c;就报错了啦。就比如这个&#xff1a;a 8&#xff0c;等于号前面和后面都需要空格&#xff0c;有点不习惯&#xff0c;在慢…

Spring中的事务与事务传播机制

事务 在学习MySQL时我们学习过事务&#xff0c;而到了Spring的学习时&#xff0c;同样会学习到事务&#xff0c;两个东西的事务的定义都是一样的&#xff1a;将一组操作封装成一个执行单元&#xff0c;要么全部成功&#xff0c;要么全部失败 在Spring中使用事务有两种方式 一…

GitHub星标超70K,阿里大佬的架构总结“分布式全解”笔记霸榜

分布式架构与微服务平台是当今IT界的关键技术&#xff0c;也是资深软件工程师和系统架构师必须掌握的核心技术。 因此小编为各位粉丝朋友带来这份阿里大佬的分布式笔记&#xff1a;从传统分布式架构迁移到基于容器技术的微服务架构为主线&#xff0c;全面、透彻地介绍了与分布…

十七、Webpack搭建本地服务器

一、为什么要搭建本地服务器&#xff1f; 目前我们开发的代码&#xff0c;为了运行需要有两个操作&#xff1a; 操作一&#xff1a;npm run build&#xff0c;编译相关的代码&#xff1b;操作二&#xff1a;通过live server或者直接通过浏览器&#xff0c;打开index.html代码…

【业务功能篇106】 微服务-springcloud-springboot-电商订单模块--秒杀服务-定时任务【下篇】

四、秒杀活动 1.秒杀活动关注点 秒杀活动的最大特点就是高并发而且是短时间内的高并发&#xff0c;那么对我们的服务要求就非常高&#xff0c;针对这种情况所产生的共性问题&#xff0c;对应的解决方案&#xff1a; 2. 秒杀服务前端 当我们点击 秒杀抢购按钮后&#xff0c;对应…

【C#-1】C#调用matlab生成的dll库

matlab打包dll 1、matlab示例程序&#xff1a; function untitled4(x)z peaks(x);figuresurf(z) end 2、输入deploytool打包matlab程序&#xff0c;具体如下&#xff1a; 3、拷贝 打包成功后&#xff0c;将生成for_redistribution_files_only文件夹中的dll文件拷贝到C#程序…