多线程三种实现

news2024/12/25 9:05:20

多线程

线程

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

(理解:应用软件中互相独立,可以同时运行的功能)

进程

进程是程序的基本执行实体。(理解:一个软件运行之后就是一个进程)

image-20240507230832108

多线程

有了多线程,就可以让程序同时做多件事情,就是为了提高程序的运行效率

多线程的应用场景

  • 软件中的耗时操作
  • 拷贝、迁移大文件
  • 加载大量的资源文件

并发

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

并行

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

多线程的实现方式

1.继承Thread类的方式进心实现

package xyz.dimeng.m01thread1;

public class MyThread extends Thread{
    @Override
    public void run() {
        //线程要执行的代码
        for (int i = 0; i < 100; i++) {
            System.out.println(getName()+"多线程方法"+i);
        }

    }
}
package xyz.dimeng.m01thread1;

public class ThreadDemo {
    /***
    * @description 多线程的第一种启动方式:
     * 1.自己定义一个类继承Thread
     * 2.重写run方法
     * 3.创建子类的对象,并启动线程
    * @param args
    * @return void
    * @author 乔晓扑
    * @date 2024/5/7 23:24
    */
    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();
        t1.setName("线程1");
        t2.setName("线程2");
        t1.start();
        t2.start();
    }
}

执行结果:一会执行线程1,一会执行线程2

2.实现Runnable接口的方式进行实现

package xyz.dimeng.m02thread2;

public class ThreadDemo {
    public static void main(String[] args) {
        /***
        * @description 多线程的第二种启动方式:
         * 1.自己定义一个类实现Runnable接口
         * 2.重写里面的run方法
         * 3.创建自己的类的对象
         * 4.创建一个Thread类的对象,并开启线程
        * @param args
        * @return void
        * @author 乔晓扑
        * @date 2024/5/7 23:38
        */
        MyRun mr = new MyRun();
        Thread t1 = new Thread(mr);
        Thread t2 = new Thread(mr);
        t1.setName("线程1");
        t2.setName("线程2");
        t1.start();
        t2.start();
    }
}
package xyz.dimeng.m02thread2;

public class MyRun implements Runnable{
    @Override
    public void run() {
        //线程要执行的代码
        for (int i = 0; i < 100; i++) {
            Thread t = Thread.currentThread();
            System.out.println(t.getName()+"多线程方法"+i);
        }

    }
}

执行结果:一会执行线程1,一会执行线程2

3.利用Callable接口和Future接口方式实现

package xyz.dimeng.m03thread3;


import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class ThreadDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        /***
        * @description 多线程的第三种实现方式:
         *  特点:可以获取到多线程运行的结果
         *  1.创建一个类MyCallable实现Callable接口
         *  2.重写call(是有返回值的,表示多线程运行的结果)
         *  3.创建MyCallable对象(表示多线程要执行的任务)
         *  4.创建FutureTask的对象(作用管理多线程运行的结果)
         *  5.创建Thread类的对象,并启动
        * @param args
        * @return void
        * @author 乔晓扑
        * @date 2024/5/7 23:49
        */
        //创建MyCallable对象(表示多线程要执行的任务)
        MyCallable mc = new MyCallable();
        //创建FutureTask的对象(作用管理多线程运行的结果)
        FutureTask<Integer> ft  = new FutureTask<>(mc);
        Thread t1 = new Thread(ft);
        t1.start();
        System.out.println(ft.get());
    }
}
package xyz.dimeng.m03thread3;

import java.util.concurrent.Callable;

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

第三种可以获取到结果

第二种和第三种扩展性强可以继承其他的类

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

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

相关文章

部署JVS服务出现上传文件不可用,问题原因排查。

事情的起因是这样的&#xff0c;部门经理让我部署一下JVS资源共享框架&#xff0c;项目的地址是在这里 项目资源地址 各位小伙伴们做好了&#xff0c;我要开始发车了&#xff0c;全新的“裂开之旅” 简单展示一下如何部署JVS文档 直达链接 撕裂要开始了 本来服务启动的好好…

SpringBoot结合Canal 实现数据同步

1、Canal介绍 Canal 指的是阿里巴巴开源的数据同步工具&#xff0c;用于数据库的实时增量数据订阅和消费。它可以针对 MySQL、MariaDB、Percona、阿里云RDS、Gtid模式下的异构数据同步等情况进行实时增量数据同步。 当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.…

使用tkinter开发的一款可扫描并删除本地文件敏感词的Windows软件

大致功能&#xff1a;可指定扫描Windows上的某个目录的所有文件&#xff0c;单个文件扫描&#xff0c;目前适配支持的文件后缀有&#xff1a;"pdf"、"txt、"doc"、"docx"&#xff0c;软件是开源的&#xff0c;大家可以在此基础上扩展更多类…

什么是HTTP?

什么是HTTP&#xff1f; HTTP基本概念HTTP 是什么&#xff1f;HTTP 常见的状态码有哪些&#xff1f;HTTP 常见字段有哪些&#xff1f; HTTP特性HTTP/1.1 的优点有哪些&#xff1f;HTTP/1.1 的缺点有哪些&#xff1f; HTTP基本概念 HTTP 是什么&#xff1f; HTTP 是超文本传输…

44.乐理基础-音符的组合方式-附点

内容参考于&#xff1a; 三分钟音乐社 首先如下图&#xff0c;是之前的音符&#xff0c;但是它不全&#xff0c;比如想要一个三拍的音符改怎样表示&#xff1f; 在简谱中三拍&#xff0c;在以四分音符为一拍的情况下&#xff0c;在后面加两根横线就可以了&#xff0c;称为附点…

C++:重载、重写与重定义

一、重载、重写与重定义的概念 C中&#xff0c;重载、重写和重定义是三个与函数和类成员相关的概念&#xff0c;但它们具有不同的含义和用途。 重载&#xff1a;是指在同一作用域内&#xff0c;可以有多个名称相同但参数列表&#xff08;参数类型、参数个数或参数顺序&#x…

Web3加密空投入门:空投类型有哪些?如何避免限制?

今天分享空投如何避免限制以提高效率&#xff0c;增加成功几率&#xff0c;首先我们来了解什么是空投加密&#xff0c;有哪些空投类型。 一、什么是空投加密&#xff1f; 加密货币空投是一种营销策略&#xff0c;包括向用户的钱包地址发送免费的硬币或代币。 加密货币项目使用…

【算法练级js+java】旋转字符串判断是否相等

每一天一道算法题训练&#xff0c;努力打开编程思维&#xff0c;才能进大厂光明正大的泡心仪的小姐姐&#xff01;&#xff01;(手动捂脸) 题目 /** * 给定字符创A和B * 旋转字符串A,就是把最左边的移动到最右边 * 比如A‘abcde’,在移动一次之后结果就是bcdea * 如果若干次之…

揭秘新时代的内容创作:一键生成的AI黑科技

在数字媒体的浪潮下&#xff0c;内容创作已成为连接人与信息的重要桥梁。然而&#xff0c;头条、公众号等平台上的爆文创作&#xff0c;对很多内容创作者来说却是一项挑战。“从选题到找素材&#xff0c;再到成文&#xff0c;”这个过程不仅耗时至少1到2个小时&#xff0c;而且…

word图片水印

一、word中旧水印如何删除 打开word模板&#xff0c;想要删除旧水印&#xff0c;如下图所示操作&#xff0c;但是旧水印删除不掉。 以为上传新水印图片会替换掉旧水印&#xff0c;结果显示了2个水印&#xff0c;要怎么删除呢&#xff1f; 如下截图所示&#xff0c;双击打开页…

如何在CentOS上解决Python版本冲突和路径问题

在使用CentOS等Linux系统时&#xff0c;安装多个Python版本可能会导致版本冲突和路径问题。当你运行python3命令时&#xff0c;系统可能不会调用你期望的Python版本&#xff0c;这可能会导致运行错误或者其他依赖问题。下面是一篇详细的博客&#xff0c;介绍如何解决这种Python…

微信小程序发布,推广等步骤

发布小程序 一.首先写好小程序后在微信开发者工具的右上角找到上传并点击 2.填写本次开发版本的版本号和备注信息&#xff0c;点击上传 3.登录微信小程序管理后台 微信公众平台 在管理处找到版本管理 4.在版本管理页面可以看到刚刚提交的小程序已经上传到这里&#xff0c;点击…

如何在两台电脑之间共享文件(超详细步骤)

所需物品&#xff1a; 两台以上电脑一个路由器 步骤1&#xff1a; 将两台电脑用网线或无线网连接至同一路由器下 只有在同一路由器下才能形成局域网&#xff0c;从而才能正常共享文件。例如通常打印机和电脑也需要保持在同一路由器下才能正常打印文件。 步骤2&#xff1a;设置…

【全开源】Java洗衣清洁服务同城清洗服务小程序源码

特色功能&#xff1a; 在线预约与支付&#xff1a;用户可以通过洗衣小程序在线预约洗衣服务&#xff0c;并选择支付方式进行支付&#xff0c;如微信支付、支付宝等。这种在线预约和支付的方式极大地方便了用户&#xff0c;提高了服务的便捷性。智能推荐与选择&#xff1a;根据…

Web 安全基础理论

Web 安全基础理论 培训、环境、资料、考证 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;624032112 网络系统管理群&#xff1a;223627079 网络建设与运维群&#xff1a;870959784 移动应用开发群&#xff1a;548238632 短视频制作群&#xff1a; 744125867极安云…

python编程“常识”【pip安装路径、计算、pycharm中的terminal运行前面的PS修改成自己环境】

一、默认的pip install包路径&#xff1a; pip show pip 二、计算 打开cmd&#xff0c;输入&#xff1a; ipython 例如你要计算2的13次方&#xff1a; ok. 三、pycharm中的terminal运行前面的PS修改成自己环境 未修改前&#xff1a; 修改过程&#xff1a; 打开设置找到too…

安卓模拟器访问主机局域网

误打误撞能够访问主机局域网了 但是不太懂是因为哪一部分成功的 先记录一下 PC&#xff1a;mac系统 安卓编译器&#xff1a;Android Studio 步骤 只需要在PC上进行设置 1. 在【设置】中&#xff0c;打开已连接的Wi-Fi的【详细信息】 2. TCP/IP --> 配置IPv6&#xff0c;修…

STM32--4G DTU 及 阿里云

模块概述 ATK-IDM750C/IDM751C 是正点原子(ALIENTEK)团队开发的一款高性能 4G Cat1 DTU 产品&#xff0c; 支持移动 4G、联通 4G 和电信 4G 手机卡。它以高速率、低延迟和无线数传作为核心功能&#xff0c; 可快速解决应用场景下的无线数传方案。 它支持 TCP/UDP/HTTP/MQTT/DN…

电脑windows系统压缩解压软件-Bandizip

一、软件功能 Bandizip是一款功能强大的压缩和解压缩软件&#xff0c;具有快速拖放、高速压缩、多核心支持以及广泛的文件格式支持等特点。 Bandizip软件的功能主要包括&#xff1a; 1. 支持多种文件格式 Bandizip可以处理多种压缩文件格式&#xff0c;包括ZIP, 7Z, RAR, A…

2024-05-09 Ubuntu上面用ffmpeg把jpeg图像转成yuv、rgb格式文件,通过ffplay命令显示这些文件成图像

一、安装 FFmpeg: 如果你的Ubuntu系统中没有安装 FFmpeg,可以通过以下命令来安装: sudo apt update sudo apt install ffmpeg 二、测试原图,cowboy_girl_1024X1280.jpeg,分辨率是1024X1280. 三、使用 ffmpeg -pix_fmts 命令查看ffmpeg支持的格式 ffmpeg -pix_fmts 四、使…